私は単純なMySQLクエリを使用していますが、ORDER BYを使用しているためパフォーマンスが悪いです。 MySQLがfilesortとtemporaryをなぜ使用しているのか分かりません。filesortとテンポラリを使用した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インデックス
UPDATE:
私は、2つの新しいを作成しようとしましたしかし、どちらも、MySQLにfilesortとtemporaryを強制的に使用させます。
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'を作成してみることができますか?私は彼らの一人が助けになると思います。 –