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

MySQL nepoužívá index při kontrole =1 , ale používá jej s =0

Proč MySQL nepoužívá index?
MySQL nebude používat index, pokud je velké procento z řádků má tuto hodnotu.

Proč bude přidání use index na dotaz zde nefunguje
Přidání use index klauzule nebude mít žádný účinek, protože use index pouze navrhne které index použít, nenavrhne, zda použít index nebo ne.

Upozornění při používání testovacích tabulek s několika řádky
To je obzvláště nepříjemné, když používáte testovací tabulky s několika řádky, protože MySQL odmítne použít index a je těžké zjistit, co je s vaším dotazem špatně.
Takže se ujistěte, že jste do testovací tabulky přidali dostatek řádků aby to byl reálný test.

Je použití indexu na sloupcích s nízkou mohutností zbytečné?
Indexování na booleovských sloupcích není tak užitečné jak jste si mysleli, než jste položili tuto otázku.
Nicméně to také není zbytečné buď.
S InnoDB Pokud je to možné, MySQL se pokusí načíst data pomocí indexů, pokud má vaše booleovské pole index, dotaz:

SELECT id, bool_field FROM table_with_many_columns_and_rows WHERE bool_field = 1

Dokáže přečíst všechna data v krycím indexu pro bool_field protože sekundární indexy v InnoDB vždy obsahují primární index (id) také.
Je to rychlejší, protože MySQL nemusí číst celou tabulku do paměti.

V MyISAM to nefunguje a MySQL prozkoumá celou tabulku.

Ale mohu použít force index
Můžete, ale u indexů s nízkou mohutností to váš dotaz zpomalí, nikoli zrychlí. Indexy přepíšete pouze u složitých dotazů a pouze pokud znáte pravidla, která MySQL používá k výběru indexů.

Odkazy:
Viz:http://dev.mysql .com/doc/refman/5.1/en/mysql-indexes.html
and: http://www.xaprb.com/blog/2006/07/04/how-to-exploit-mysql-index-optimizations/

Pokud chcete knihu na toto téma:přečtěte si
Vysoce výkonné MySQL:http://oreilly.com /katalog/9780596003067



  1. Hostingový balíček na Chocolatey

  2. Mysqli neumožňuje více dotazů?

  3. Jak používáte klauzuli MySql IN

  4. Instalace MySQL for Visual Studio se nezdařila, kód chyby 1603