sql >> Databáze >  >> RDS >> Mysql

MySql odmítá použít index

MySQL nepoužije index, pokud odhadne, že by vybralo výrazně velkou část tabulky, a myslí si, že skenování tabulky je v těchto případech ve skutečnosti efektivnější.

Analogicky je to důvod, proč rejstřík knihy neobsahuje příliš běžná slova jako „the“ – protože by bylo ztrátou času hledat slovo v rejstříku a najít seznam čísel stránek velmi dlouhý seznam, dokonce i každá stránka v knize. Efektivnější by bylo jednoduše číst od obalu k obalu.

Moje zkušenost je, že k tomu dochází v MySQL, pokud by vyhledávací kritéria dotazu odpovídala více než 20 % tabulky, a to je obvykle správný přechodový bod. Mohou existovat určité odchylky na základě datových typů, velikosti tabulky atd.

Můžete naznačit MySQL, abyste ji přesvědčili, že prohledávání tabulek by bylo neúměrně drahé, takže by bylo mnohem pravděpodobnější použít index. Obvykle to není nutné, ale můžete to udělat takto:

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


  1. Oracle:jak UPSERT (aktualizovat nebo vložit do tabulky?)

  2. Základy správy schémat PostgreSQL

  3. Počítání nesouvislých hodnot

  4. návratový průměr počtu záznamů po skupině po příkazu