ho la seguente query:MySQL Query: la performance
SELECT COUNT(sid),fDate,COUNT(DISTINCT(cid))
FROM forwarding
WHERE fDate BETWEEN "2011-06-01" AND "2011-06-30"
GROUP BY fDate
spieghi mi dà il seguente risultato:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE forwarding index fDate,fDate_2 fDate_2 3 1481127 Using where
Si può vedere che c'è un sacco di dati. L'orario di lavoro totale è 12 secondi. Come posso migliorare le prestazioni? Non so cosa posso fare di più come impostare l'indice.
Ci sono i miei indici per questa tabella:
fDate (fDate, f_shop)
fDate2(dDate),
f_shop(f_shop)
Grazie per il vostro aiuto.
UPDATE:
Ora ho aggiunto una colonna nella mia clausola WHERE e la query è molto più lento di prima.
SELECT COUNT(sid),fDate,COUNT(DISTINCT(cid)) FROM forwarding
WHERE fDate BETWEEN "2011-06-01" AND "2011-06-30" AND f_shop=10077 GROUP BY fDate
Ho un indice su forwardDate e su f_shop ma le prestazioni rallentano. Qual è la soluzione perfetta? Grazie
Provare un indice '(fDate, cid)'. –
E se 'sid' non può essere' NULL', usa 'COUNT (*)' invece di 'COUNT (sid)' –
E una domanda: è 'fDate' di tipo' DATE' o 'DATETIME'? –