MySQL nie użyje indeksu, jeśli oszacuje, że wybrałby znacząco dużą część tabeli i uważa, że skanowanie tabeli jest w takich przypadkach bardziej wydajne.
Analogicznie, jest to powód, dla którego indeks książki nie zawiera bardzo popularnych słów, takich jak „the” — ponieważ szukanie słowa w indeksie i odnalezienie listy numerów stron byłoby stratą czasu. bardzo długa lista, nawet każda strona w księdze. Bardziej efektywne byłoby po prostu przeczytanie książki od deski do deski.
Z mojego doświadczenia wynika, że dzieje się tak w MySQL, jeśli kryteria wyszukiwania zapytania pasują do więcej niż 20% tabeli i jest to zwykle właściwy punkt przecięcia. Mogą wystąpić pewne różnice w zależności od typów danych, rozmiaru tabeli itp.
Możesz dać podpowiedź MySQLowi, aby przekonać go, że skanowanie tabeli byłoby zbyt drogie, więc bardziej prawdopodobne byłoby użycie indeksu. Zwykle nie jest to konieczne, ale możesz to zrobić w ten sposób:
SELECT taskid FROM tasktransitions FORCE INDEX (transitiondate_ix)
WHERE transitiondate>'2013-09-31 00:00:00';