'Optimize laravel query builder
I have two tables
click_logs has 100k records with columns:
id
message_id --index
url
tracking_logs has 10 mil records with columns:
id
message_id --index
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
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 |
|---|
