Estoy usando una simple consulta de MySQL, pero el rendimiento es realmente malo debido al uso de ORDER BY. No puedo entender por qué MySQL está usando filesort y temporal.Consulta de MySQL usando filesort y temporal
Mi consulta es:
EXPLAIN
SELECT * FROM Events
INNER JOIN EventLogFiles ON ServerID = 42
AND Events.LogFileID = EventLogFiles.LogFileID
ORDER BY ReportID DESC , TimeWritten DESC
LIMIT 100
Ésta es la salida de explicar: estructura
tabla de eventos
tabla de eventos índices
EventLogFiles Tabla estructura
EventLogFiles Tabla índices
ACTUALIZACIÓN:
Me trataron de crear dos nuevos índices, pero ambos obligan a MySQL a usar filesort y temporal.
ALTER TABLE Events ADD INDEX `ReportID_TimeWritten_ServerID_LogFileID` (ReportID DESC, TimeWritten DESC, ServerID, LogFileID)
ALTER TABLE Events ADD INDEX `ServerID_LogFileID_ReportID_TimeWritten` (ServerID, LogFileID, ReportID DESC, TimeWritten DESC)
¿Puede sacar los primeros 100 registros a una tabla temporal sin pedirlos, y luego ordenar solo esos 100 registros con otra consulta? –
Agrega Events.LogFileID al índice de varias columnas. –
¿Podría intentar crear índices 'ServerID_ReportID_TimeWritten_LogFileID',' ReportID_TimeWritten_ServerID_LogFileID'? Creo que uno de ellos ayudará. –