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

Hiệu suất Mysql trên bảng hàng 6 triệu

Điều bạn muốn đảm bảo là truy vấn sẽ CHỈ sử dụng chỉ mục, vì vậy hãy đảm bảo rằng chỉ mục bao gồm tất cả các trường bạn đang chọn. Ngoài ra, vì nó là một truy vấn phạm vi có liên quan, bạn cần phải có venid đầu tiên trong chỉ mục, vì nó được truy vấn dưới dạng một hằng số. Do đó, tôi sẽ tạo và lập chỉ mục như vậy:

ALTER TABLE events ADD INDEX indexNameHere (venid, date, time);

Với chỉ mục này, tất cả thông tin cần thiết để hoàn thành truy vấn đều có trong chỉ mục. Điều này có nghĩa là, hy vọng rằng công cụ lưu trữ có thể tìm nạp thông tin mà không thực sự tìm kiếm bên trong bảng. Tuy nhiên, MyISAM có thể không làm được điều này, vì nó không lưu trữ dữ liệu trong các phần của chỉ mục, vì vậy bạn có thể không nhận được tốc độ tăng như mong muốn. Nếu đúng như vậy, hãy thử tạo một bản sao của bảng và sử dụng công cụ InnoDB trên bản sao đó. Lặp lại các bước tương tự ở đó và xem liệu bạn có nhận được tốc độ tăng đáng kể hay không. InnoDB không lưu trữ các giá trị trường trong các lá chỉ mục và cho phép bao gồm các chỉ mục.

Bây giờ, hy vọng bạn sẽ thấy những điều sau khi giải thích truy vấn:

mysql> EXPLAIN SELECT date, time FROM events WHERE venid='47975' AND date>='2009-07-11' ORDER BY date;

id  select_type table  type  possible_keys        key       [..]  Extra
1   SIMPLE   events range date_idx, indexNameHere indexNameHere   Using index, Using where


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. tự động gia tăng chính để lại khoảng trống trong việc đếm

  2. mysql - sau khi chèn bỏ qua lấy khóa chính

  3. Lỗi cú pháp MySQL trên DELIMITER trước khi TẠO TRIGGER

  4. Thủ tục được lưu trữ trong MySQL gây ra `` Lệnh không đồng bộ hóa ''

  5. Làm thế nào để đặt bộ mã cho MySQL trong RODBC?