Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL verwendet den Index nicht beim Überprüfen von =1 , sondern verwendet ihn mit =0

Warum verwendet MySQL keinen Index?
MySQL verwendet keinen Index, wenn es sich um einen großen Prozentsatz handelt der Zeilen haben diesen Wert.

Warum wird beim Hinzufügen von use index verwendet? zur Abfrage funktioniert hier nicht
Hinzufügen eines use index -Klausel hat keine Wirkung, da use index verwendet wird wird nur welche vorschlagen Index zu verwenden, wird nicht vorgeschlagen, ob ein Index verwendet werden soll oder nicht.

Vorsicht bei der Verwendung von Testtabellen mit wenigen Zeilen
Dies ist besonders ärgerlich, wenn Testtabellen mit wenigen Zeilen verwendet werden, da MySQL sich weigert, einen Index zu verwenden, und es schwer zu erkennen ist, was an Ihrer Abfrage falsch ist.
Stellen Sie also sicher, dass Sie genügend Zeilen zu einer Testtabelle hinzufügen um es zu einem realistischen Test zu machen.

Ist es sinnlos, einen Index für Spalten mit niedriger Kardinalität zu verwenden?
Die Indizierung auf booleschen Spalten ist nicht so nützlich wie Sie dachten, bevor Sie diese Frage stellten.
Aber es ist auch nicht nutzlos entweder.
Mit InnoDB MySQL wird versuchen, Daten nach Möglichkeit mithilfe der Indizes abzurufen, wenn Ihr boolesches Feld einen Index hat, die Abfrage:

SELECT id, bool_field FROM table_with_many_columns_and_rows WHERE bool_field = 1

Kann alle Daten im abdeckenden Index für bool_field lesen weil Sekundärindizes in InnoDB immer den Primärindex (id) beinhalten auch.
Das ist schneller, weil MySQL nicht die gesamte Tabelle in den Speicher lesen muss.

In MyISAM funktioniert das nicht und MySQL untersucht die ganze Tabelle.

Aber ich kann force index verwenden
Sie können, aber bei Indizes mit niedriger Kardinalität wird Ihre Abfrage dadurch langsamer, nicht schneller. Überschreiben Sie die Indizes nur bei komplexen Abfragen und nur wenn Sie die Regeln kennen, die MySQL verwendet, um Indizes auszuwählen.

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

Wenn Sie ein Buch zu diesem Thema möchten:Lesen Sie
Hochleistungs-MySQL:http://oreilly.com /catalog/9780596003067