Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL odmawia użycia indeksu

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';


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JAK wybrać min od varchar do int w mysql

  2. Python traci połączenie z bazą danych MySQL po około dniu

  3. Zaktualizuj i wybierz w jednym zapytaniu

  4. Automatycznie ustaw autoinkrementację mysql na wartość minimalną

  5. Wyłącz ostrzeżenia i błędy w PHP i MySQL