Ho la seguente interrogazioneCome migliorare le prestazioni di COUNT (campo DISTINCT1) ... 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)
Con un indice di copertura 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'è un modo posso ottimizzare ulteriormente questa ricerca?
Che cosa significa esattamente Using index for group-by (scanning)
? Significa che l'intera clausola GROUP BY
viene eseguita interamente da un indice mentre la parte COUNT(DISTINCT ip_address)
dell'istruzione non è?
Grazie Danny, per curiosità c'è un modo per capire se "L'uso dell'indice per raggruppamento (scansione)" si riferisce all'indice applicato alla clausola 'GROUP-BY' o' DISTINCT'? – user784637
Poiché 'DISTINCT' è solo [un caso speciale di' GROUP BY'] (http://dev.mysql.com/doc/refman/5.0/en/distinct-optimization.html), e poiché entrambe le colonne provengono dal stesso tavolo, lo stesso indice, onestamente non sono sicuro. –