Tôi đang sử dụng truy vấn MySQL đơn giản, nhưng hiệu suất thực sự là xấu vì sử dụng ORDER BY. Tôi không thể tìm ra lý do tại sao MySQL đang sử dụng filesort và tạm thời.Truy vấn MySQL bằng cách sử dụng filesort và tạm thời
truy vấn của tôi là:
EXPLAIN
SELECT * FROM Events
INNER JOIN EventLogFiles ON ServerID = 42
AND Events.LogFileID = EventLogFiles.LogFileID
ORDER BY ReportID DESC , TimeWritten DESC
LIMIT 100
Đây là sản phẩm của GIẢI THÍCH:
Bảng Sự kiện cấu trúc
Bảng Sự kiện chỉ số
Bảng EventLogFiles cấu trúc
Bảng EventLogFiles chỉ số
UPDATE:
tôi đã cố gắng để tạo ra hai mới các chỉ mục, nhưng cả hai vẫn buộc MySQL sử dụng filesort và tạm thời.
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)
Bạn có thể xuất 100 bản ghi đầu tiên vào một bảng tạm thời không có thứ tự, sau đó chỉ đặt 100 bản ghi đó với một truy vấn khác không? –
Thêm Events.LogFileID vào chỉ mục nhiều cột. –
Bạn có thể thử tạo các chỉ mục 'ServerID_ReportID_TimeWritten_LogFileID',' ReportID_TimeWritten_ServerID_LogFileID' không? Tôi nghĩ một trong số họ sẽ giúp. –