2009-05-29 3 views
4

Ich habe eine Tabelle mit zwei Indizes, von denen einer für eine bestimmte Abfrage der schneller abdeckende Index ist. MySQL (5.1) wählt jedoch nicht den richtigen Index. Ich habe mir die Erklärung für diese Frage angeschaut und einige Geschwindigkeitstests durchgeführt und es macht einen großen Unterschied, wenn Sie den Schlüssel erzwingen.SQL zur Verwendung des korrekten Index

Gibt es eine Möglichkeit zu untersuchen, wie der Index ausgewählt wird und auf welchen Kriterien er basiert?

Antwort

7

Dies wird den Index müssen Sie (falls es ist verwendbar):

SELECT * 
FROM table FORCE INDEX (myindex) 

MySQL speichert und verwendet Statistiktabelle die Mächtigkeit der Indizes zu schätzen.

Es hält es in information_schema.statistics.

Von zwei Indizes, die zum Filtern angewendet werden können, wählt MySQL den mit größerer Kardinalität.

Wenn zwei Indizes mit großer Kardinalität vorhanden sind, kann sie INDEX MERGE über beide auswählen.

In einem Index WHERE Zustand und ein anderer kann ORDER BY dienen dienen kann, MySQL scheint die erste

Im letzteren Fall zu bevorzugen, aber es ist besser, einen Composite-Index über beide Säulen zu schaffen, die dazu dienen können beide Klauseln.