Mysql
 sql >> Database >  >> RDS >> Mysql

MySql si rifiuta di usare index

MySQL non utilizzerà l'indice se stima che selezionerebbe una porzione significativamente ampia della tabella e ritiene che una scansione della tabella sia effettivamente più efficiente in questi casi.

Per analogia, questo è il motivo per cui l'indice di un libro non contiene parole molto comuni come "il" -- perché sarebbe una perdita di tempo cercare la parola nell'indice e trovare l'elenco dei numeri di pagina è un lista molto lunga, anche ogni pagina del libro. Sarebbe più efficiente leggere semplicemente la copertina del libro.

La mia esperienza è che questo accade in MySQL se i criteri di ricerca di una query corrispondono a più del 20% della tabella e questo è solitamente il punto di crossover giusto. Potrebbero esserci delle variazioni in base ai tipi di dati, alle dimensioni della tabella, ecc.

Puoi dare un suggerimento a MySQL per convincerlo che una scansione della tabella sarebbe proibitivamente costosa, quindi sarebbe molto più probabile che utilizzi l'indice. Di solito non è necessario, ma puoi farlo in questo modo:

SELECT taskid FROM tasktransitions FORCE INDEX (transitiondate_ix)
WHERE transitiondate>'2013-09-31 00:00:00';