tengo la siguiente consulta:MySQL Query mejorar el rendimiento
SELECT COUNT(sid),fDate,COUNT(DISTINCT(cid))
FROM forwarding
WHERE fDate BETWEEN "2011-06-01" AND "2011-06-30"
GROUP BY fDate
Explicar me da el siguiente resultado:
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
Se puede ver que hay una gran cantidad de datos. El tiempo total de trabajo es de 12 segundos. ¿Cómo puedo mejorar el rendimiento? No sé lo que puedo hacer más como establecer el índice.
Hay mis índices para esta tabla:
fDate (fDate, f_shop)
fDate2(dDate),
f_shop(f_shop)
Gracias por su ayuda.
ACTUALIZACIÓN:
Ahora he añadido una columna en mi cláusula where y la consulta es mucho más lento que antes.
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
Tengo un índice en forwardDate y f_shop pero el rendimiento es lento. ¿Cuál es la solución perfecta? Gracias
Pruebe un índice '(fDate, cid)'. –
Y si 'sid' no puede ser' NULL', use 'COUNT (*)' en lugar de 'COUNT (sid)' –
Y una pregunta: ¿es 'fDate' del tipo' DATE' o de 'DATETIME'? –