我有以下查詢如何提高COUNT(DISTINCT field1)... GROUP BY field2的性能?
EXPLAIN SELECT COUNT(DISTINCT ip_address) as ip_address, exec_date
FROM requests
GROUP BY exec_date;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE requests range NULL daily_ips 263 NULL 488213 Using index for group-by (scanning)
隨着覆蓋索引daily_ips
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
requests 1 daily_ips 1 exec_date A 16 NULL NULL YES BTREE
requests 1 daily_ips 2 ip_address A 483492 NULL NULL YES BTREE
有沒有什麼辦法可以進一步優化此查詢?
Using index for group-by (scanning)
是什麼意思?這是否意味着整個GROUP BY
子句完全是從索引完成的,而COUNT(DISTINCT ip_address)
部分則不是?
感謝Danny,出於好奇,有沒有什麼辦法可以判斷'使用索引for group-by(掃描)'是指應用於GROUP BY或DISTINCT子句的索引? – user784637
由於'DISTINCT'只是[GROUP BY'的特例(http://dev.mysql.com/doc/refman/5.0/en/distinct-optimization.html),並且由於兩列來自同樣的表格,相同的索引,我真的不確定。 –