Ich benutze eine einfache MySQL-Abfrage, aber die Leistung ist wirklich schlecht wegen der Verwendung von ORDER BY. Ich kann nicht herausfinden, warum MySQL filesort und temporary verwendet.MySQL-Abfrage mit filesort und temporär
Meine Frage ist:
EXPLAIN
SELECT * FROM Events
INNER JOIN EventLogFiles ON ServerID = 42
AND Events.LogFileID = EventLogFiles.LogFileID
ORDER BY ReportID DESC , TimeWritten DESC
LIMIT 100
Dies ist die Ausgabe von EXPLAIN:
Tabelle Events Struktur
Tabelle Events Indizes
Tabelle EventLogFiles Struktur
Tabelle EventLogFiles Indizes
UPDATE:
Ich habe versucht, zwei neue zu schaffen Indizes, aber beide zwingen immer noch MySQL, filesort und temporary zu verwenden.
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)
Können Sie die ersten 100 Datensätze ohne Bestellung in eine temporäre Tabelle ausgeben und dann nur diese 100 Datensätze mit einer anderen Abfrage bestellen? –
Fügen Sie dem mehrspaltigen Index Events.LogFileID hinzu. –
Könnten Sie versuchen, Indexe 'ServerID_ReportID_TimeWritten_LogFileID',' ReportID_TimeWritten_ServerID_LogFileID' zu erstellen? Ich denke, einer von ihnen wird helfen. –