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

Mehrere MySQL-Indizes vs. mehrspaltiger Index für die Suche

Sie müssen verstehen, dass MySQL (im Fall von InnoDB) nur das am weitesten links stehende Präfix Ihrer Indizes verwendet. Wenn sich der Index also in Field1 + Field2 befindet, wird nur mit Field2 in WHERE abgefragt kann nicht den gesamten Index verwenden.

Und wenn Field1 + Field2 + Field3 ist der Index, eine Abfrage mit nur Field1 & Field3 im WO das gleiche würde passieren.

Möglichkeit 1

Wenn Sie jede Suche optimieren möchten, müssten Sie für jedes Suchszenario einen eigenen Index erstellen. Wenn die Tabellen jedoch groß sind, werden auch die Indizes extrem groß. Wenn diese Suchanfragen sehr oft gestellt werden, würde sich das lohnen.

Option 2

Sie können einen raffinierten Trick anwenden, wenn Ihre Suchen eine geringe Selektivität aufweisen (z. B. Geschlecht), indem Sie die Spalten mit geringer Selektivität ganz links platzieren und Gender IN(M, F) verwenden um es in das WHERE aufzunehmen -Klausel zusammen mit den anderen Spalten, um den gesamten Index zu verwenden.