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

Truy vấn MySQL chậm hơn sau khi tạo chỉ mục

Có thực tế không khi có nhiều hàng với cùng một price ? Có thực tế không khi trả về 444K hàng từ một truy vấn? Tôi hỏi những điều này vì tối ưu hóa truy vấn được dự đoán trên dữ liệu "bình thường".

Một chỉ mục (ví dụ:INDEX(price) ) hữu ích khi tìm kiếm price điều đó xảy ra một số ít lần. Trên thực tế, Trình tối ưu hóa sẽ tránh chỉ mục nếu nó thấy rằng giá trị đang được tìm kiếm xảy ra nhiều hơn khoảng 20% ​​thời gian. Thay vào đó, nó sẽ đơn giản bỏ qua chỉ mục và thực hiện những gì bạn đã thử nghiệm trước - chỉ cần quét toàn bộ bảng, bỏ qua bất kỳ hàng nào không khớp.

Bạn sẽ có thể thấy điều đó bằng cách thực hiện

EXPLAIN select * from books where price = 10

có và không có chỉ mục. Ngoài ra, bạn có thể thử:

EXPLAIN select * from books IGNORE INDEX(books_price_index) where price = 10
EXPLAIN select * from books FORCE INDEX(books_price_index) where price = 10

Nhưng, ... Có vẻ như Trình tối ưu hóa đã không bỏ qua chỉ mục. Tôi thấy rằng "bản chất" của price là "1", ngụ ý rằng chỉ có một giá trị khác biệt trong cột đó. 'Thống kê' này không chính xác hoặc gây hiểu lầm. Vui lòng chạy cái này và xem những gì thay đổi:

ANALYZE TABLE books;

Điều này sẽ tính toán lại số liệu thống kê thông qua một số thăm dò ngẫu nhiên và có thể thay đổi "1" đó có lẽ thành "2".

Lời khuyên chung:Cẩn thận với các điểm chuẩn chạy dựa trên dữ liệu bịa đặt.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giải pháp để Chèn ổ khóa ý định trong MySQL

  2. Xây dựng cơ sở dữ liệu khả dụng cao cho Moodle bằng cách sử dụng MySQL Replication

  3. Cách thiết lập và đăng nhập với tư cách người dùng root trong MySQL

  4. INNER JOIN cùng một bảng

  5. Cải thiện hiệu suất MySQL với Cài đặt InnoDB nâng cao