Я использую простой MySQL-запрос, но производительность очень плохо из-за использования ORDER BY. Я не могу понять, почему MySQL использует filesort и временные.MySQL-запрос с использованием filesort и временных
Мой запрос:
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 индексы
UPDATE:
Я попытался создать два новых индексы, но оба по-прежнему вынуждают MySQL использовать filesort и временные.
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)
Можете ли вы вывести первые 100 записей во временную таблицу без упорядочения, а затем заказывать только 100 записей с другим запросом? –
Добавить Events.LogFileID в индекс с несколькими столбцами. –
Не могли бы вы попытаться создать индексы 'ServerID_ReportID_TimeWritten_LogFileID',' ReportID_TimeWritten_ServerID_LogFileID'? Я думаю, что один из них поможет. –