'Optimize laravel query builder

I have two tables

click_logs has 100k records with columns:

  1. id

  2. message_id --index

  3. url

tracking_logs has 10 mil records with columns:

  1. id

  2. message_id --index

  3. campaign_id --foreign key to campaigns table

I'm currently getting the top 5 clicks with this laravel query:

 $records = ClickLog::select(DB::raw(DB::getTablePrefix() . 'click_logs.*, count(*) as `aggregate`'))
    ->leftJoin('tracking_logs', 'tracking_logs.message_id', '=', 'click_logs.message_id')
    ->where('tracking_logs.campaign_id', '=', $this->id);

 $records = $records->groupBy('click_logs.url')
    ->orderBy('click_logs.id', 'desc')
    ->take(5);

raw query :

SELECT '_click_logs'.\*, count(*) AS aggregate FROM '_click_logs' 
        LEFT JOIN 'tracking_logs' ON 'tracking_logs'.'message_id' = '_click_logs'.'message_id' 
        WHERE 'tracking_logs'.'campaign_id' = ? 
        GROUP BY '_click_logs'.'url' ORDER BY '_click_logs'.'id' DESC LIMIT 5

EXPLAIN Table

explain table

Its currently taking 0.7s to 0.5s

Can this query builder be more optimize to get faster result?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source