Tại sao MySQL không sử dụng chỉ mục?
MySQL sẽ không sử dụng chỉ mục nếu tỷ lệ phần trăm lớn của các hàng có giá trị đó.
Tại sao việc thêm use index
truy vấn không hoạt động ở đây
Thêm use index
mệnh đề sẽ không có hiệu lực, vì use index
sẽ chỉ đề xuất cái nào chỉ mục để sử dụng, nó sẽ không gợi ý có nên sử dụng một chỉ mục hay không.
Lưu ý khi sử dụng bảng kiểm tra có ít hàng Điều này đặc biệt gây khó chịu khi sử dụng bảng kiểm tra có ít hàng vì MySQL sẽ từ chối sử dụng chỉ mục và rất khó để biết truy vấn của bạn có vấn đề gì.
Vì vậy, hãy đảm bảo bạn thêm đủ hàng vào bảng kiểm tra để biến nó thành một bài kiểm tra thực tế.
Việc sử dụng chỉ mục trên các cột có số lượng thấp có vô ích không? Việc lập chỉ mục
trên các cột boolean không hữu ích như bạn đã nghĩ trước khi đặt câu hỏi này.
Tuy nhiên, nó cũng không vô ích .
Với InnoDB MySQL sẽ thử và truy xuất dữ liệu bằng cách sử dụng các chỉ mục nếu có thể, nếu trường boolean của bạn có chỉ mục thì truy vấn:
SELECT id, bool_field FROM table_with_many_columns_and_rows WHERE bool_field = 1
Có thể đọc tất cả dữ liệu trong chỉ mục bao gồm cho bool_field
bởi vì các chỉ mục phụ trong InnoDB luôn bao gồm chỉ mục chính (id) cũng như vậy.
Điều này nhanh hơn vì MySQL không phải đọc toàn bộ bảng vào bộ nhớ.
Trong MyISAM, điều này không hoạt động và MySQL sẽ kiểm tra toàn bộ bảng.
Nhưng tôi có thể sử dụng force index
Bạn có thể, nhưng đối với các chỉ mục bản số thấp, nó sẽ làm cho truy vấn của bạn chậm hơn, không nhanh hơn. Chỉ ghi đè các chỉ mục trên các truy vấn phức tạp và chỉ nếu bạn biết các quy tắc MySQL sử dụng để chọn chỉ mục.
Liên kết:
Xem: http://dev.mysql .com / doc / refman / 5.1 / en / mysql-indexes.html
và: http://www.xaprb.com/blog/2006/07/04/how-to-exploit-mysql-index-optimizations/
Nếu bạn muốn một cuốn sách về chủ đề này:hãy đọc
MySQL hiệu suất cao: http://oreilly.com / catalog / 9780596003067