Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Truy vấn MySQL chậm

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 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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. URL và văn bản liên kết từ cơ sở dữ liệu

  2. DAO.Recordset.Update kết quả trong khóa tính toán

  3. Tổng hợp dữ liệu mongodb và mysql

  4. Kiểm tra xem mô hình laravel đã được lưu hay truy vấn đã được thực thi chưa

  5. mysql Lựa chọn từ hai bảng khác nhau.