鍍金池/ 問答/PHP  數(shù)據(jù)庫/ mysql關(guān)于group by語句的優(yōu)化問題,求思路

mysql關(guān)于group by語句的優(yōu)化問題,求思路

想要優(yōu)化一句關(guān)于group by語句,不知道要從何下手,求思路

SELECT

adv_id,
network_id,
SUM(re_click) AS clk,
SUM(deny_click) AS dny_clk,
SUM(re_conver) AS re_ins,
SUM(mat_conver) AS mat_ins,
SUM(def_conver) AS def,
SUM(cost) AS cost,
SUM(earn) AS earn 

FROM ams_data_hourly_2018_03 WHERE start_time BETWEEN 1519862400 AND 1519948799
GROUP BY

adv_id,
network_id

explain:

clipboard.png

索引:

clipboard.png

求大神指點

回答
編輯回答
糖果果

1、時間檢索結(jié)果集小的話就一個start_time單列索引就夠了,force一下索引,因為group by會引導mysql走group by字段的索引或者直接全掃。
2、看表名,你這應該是一個分表,如果時間范圍直接覆蓋了大部分表數(shù)據(jù)的話什么索引都不用了,全表掃吧,什么三個字段兩個字段加索引并沒有什么用,時間范圍加group by字段的復合索引也只用到了時間字段,只有g(shù)roup by字段的索引就是掃了全表,除非用索引覆蓋

2017年12月30日 10:44
編輯回答
墨小白

adv_id and network_id 聯(lián)合索引

2017年1月16日 04:18
編輯回答
誮惜顏

試試加FORCE INDEX start_time_adv_id_networkid

把start_time_adv_id_networkid定義為 (start_time, adv_id, network_id)
adv_id要在network_id之前,因為你分組時adv_id在前面.

2017年2月25日 07:12
編輯回答
尐懶貓

針對 adv_id,network_id 建個復合索引,不要以 start_time 開始,這樣不滿足“最左匹配”原則。

2018年4月8日 09:12