Я использую простой запрос MySQL, но производительность очень плохая из-за использования ORDER BY. Я не могу понять, почему MySQL использует файловую сортировку и временную.
Мой запрос:
EXPLAIN
SELECT * FROM Events
INNER JOIN EventLogFiles ON ServerID = 42
AND Events.LogFileID = EventLogFiles.LogFileID
ORDER BY ReportID DESC , TimeWritten DESC
LIMIT 100
Это вывод EXPLAIN:
Структура таблицы событий
Индексы таблицы событий
Структура таблицы EventLogFiles
Индексы таблицы EventLogFiles
ОБНОВЛЕНИЕ:
I попытался создать два новых индекса, но оба по-прежнему заставляют MySQL использовать файловую сортировку и временную.
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)