MySQL sẽ không sử dụng chỉ mục nếu nó ước tính rằng nó sẽ chọn một phần lớn đáng kể của bảng và nó cho rằng quét bảng thực sự hiệu quả hơn trong những trường hợp đó.
Bằng cách tương tự, đây là lý do tại sao chỉ mục của một cuốn sách không chứa các từ rất phổ biến như "the" - bởi vì sẽ rất lãng phí thời gian để tra cứu từ trong chỉ mục và tìm danh sách số trang là danh sách rất dài, thậm chí từng trang trong cuốn sách. Sẽ hiệu quả hơn nếu chỉ cần đọc bìa sách.
Kinh nghiệm của tôi là điều này xảy ra trong MySQL nếu tiêu chí tìm kiếm của truy vấn phù hợp với hơn 20% bảng và đây thường là điểm giao nhau phù hợp. Có thể có một số biến thể dựa trên loại dữ liệu, kích thước của bảng, v.v.
Bạn có thể đưa ra một gợi ý cho MySQL để thuyết phục nó rằng việc quét bảng sẽ rất tốn kém, vì vậy sẽ có nhiều khả năng sử dụng chỉ mục hơn. Điều này thường không cần thiết, nhưng bạn có thể làm như sau:
SELECT taskid FROM tasktransitions FORCE INDEX (transitiondate_ix)
WHERE transitiondate>'2013-09-31 00:00:00';