Bạn chỉ yêu cầu hai cột trong truy vấn của mình, vì vậy các chỉ mục có thể / nên đến đó:
- DateTime
- Thời gian tải
Một cách khác để tăng tốc truy vấn của bạn có thể chia trường DateTime thành hai:ngày và giờ.
Bằng cách này, db có thể nhóm trực tiếp trên trường ngày thay vì tính DATE (...).
ĐÃ CHỈNH SỬA:
Nếu bạn thích sử dụng trình kích hoạt, hãy tạo một cột mới (DATE) và gọi nó là newdate và thử với cái này (tôi không thể thử bây giờ để xem nó có chính xác không):
CREATE TRIGGER upd_check BEFORE INSERT ON SpeedMonitor
FOR EACH ROW
BEGIN
SET NEW.newdate=DATE(NEW.DateTime);
END
ĐÃ CHỈNH SỬA LẠI:
Tôi vừa tạo một db với cùng một bảng theo dõi tốc độ chứa đầy khoảng 900.000 bản ghi.
Sau đó, tôi chạy truy vấn S ELECT newdate, AVG (LoadTime) FROM speedmonitor GROUP BY newdate và mất khoảng 100 giây !!
Xóa chỉ mục trên trường newdate (và xóa bộ nhớ cache bằng cách sử dụng RESET QUERY CACHE
và FLUSH TABLES
), cùng một truy vấn mất 0,6 giây !!!
Chỉ để so sánh:truy vấn CHỌN NGÀY (DateTime), thời gian tải AVG (LoadTime) TỪ NHÓM máy theo dõi tốc độ THEO NGÀY (DateTime)
mất 0,9 giây.
Vì vậy, tôi cho rằng chỉ mục trên newdate không tốt:hãy xóa nó.
Tôi sẽ thêm nhiều bản ghi nhất có thể ngay bây giờ và kiểm tra lại hai truy vấn.
CHỈNH SỬA CUỐI CÙNG:
Xóa chỉ mục trên các cột newdate và DateTime, có bản ghi 8ml trên bảng speedmonitor, đây là kết quả:
- chọn và nhóm trên cột cập nhật mới: 7,5 giây
- chọn và nhóm trên trường DATE (DateTime): 13,7 giây
Tôi nghĩ đó là một tốc độ tăng tốc tốt.
Thời gian thực hiện truy vấn bên trong dấu nhắc lệnh mysql.