我有一個簡單的查詢,需要2.5秒來評估。我想優化它,但我不知道如何做到這一點。任何人都可以建議如何優化? 邏輯是下一個:計算指定廣告系列的引薦來源分組的所有點擊次數。 有「解釋」下面的mysql查詢。表格點擊和用戶有很多行。簡單的mysql查詢優化大表
mysql> explain select count(*) as amount,ac.referrer from clicks ac
-> inner join users a on a.id = ac.user_id
-> where a.campaign_id = 26 group by ac.referrer
-> order by amount desc;
+----+-------------+-------+--------+-------------------+---------+---------+------------------------+---------+---------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+-------------------+---------+---------+------------------------+---------+---------------------------------+
| 1 | SIMPLE | ac | ALL | ac_adv | NULL | NULL | NULL | 1607031 | Using temporary; Using filesort |
| 1 | SIMPLE | a | eq_ref | PRIMARY,advoc_cam | PRIMARY | 4 | mydb.ac.user_id | 1 | Using where |
+----+-------------+-------+--------+-------------------+---------+---------+------------------------+---------+---------------------------------+
2 rows in set (0.00 sec)
編輯
對不起,未提供shemas,但現在沒有這個必要。現在我已經完全覆蓋了索引列的建議在接受的答案。
這是正確的解決方案添加索引(c.user_id,c.referrer)。其他指標已經存在並且沒有意義。但現在查詢完成時間爲0.2秒,而不是2.5-3秒。謝謝!
請向我們展示表格定義! – undone 2014-10-02 09:04:56
請給我們表結構。 試試這個:ALTER TABLE'clicks'ADD INDEX'referrer'('referrer'); – faster2b 2014-10-02 09:32:15
我真的不明白。據推測,你已經有一個複合主鍵(引用者,user_id),並且users.id必須已經是一個PK。所以唯一剩下的就是給campaign_id添加一個索引 - 但我懷疑這會產生多大的影響。 :-( – Strawberry 2014-10-02 09:54:44