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.