Tôi có truy vấn sau đâyLàm cách nào để cải thiện hiệu suất của 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)
Với chỉ số bao phủ 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
Có cách nào tôi có thể tiếp tục tối ưu hóa truy vấn này?
Chính xác thì Using index for group-by (scanning)
có nghĩa là gì? Điều đó có nghĩa là toàn bộ mệnh đề GROUP BY
được thực hiện hoàn toàn từ một chỉ mục trong khi phần COUNT(DISTINCT ip_address)
của tuyên bố không?
Cảm ơn Danny, vì tò mò có cách nào tôi có thể biết liệu 'Sử dụng chỉ mục cho nhóm theo (quét)' có nghĩa là chỉ mục được áp dụng cho mệnh đề 'GROUP-BY' hoặc' DISTINCT' không? – user784637
Vì 'DISTINCT' chỉ là [trường hợp đặc biệt của' GROUP BY'] (http://dev.mysql.com/doc/refman/5.0/en/distinct-optimization.html), và vì cả hai cột đều xuất phát từ cùng một bảng, cùng một chỉ mục, tôi thành thật không chắc chắn. –