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

Gibt es eine optimale Methode zum Bestellen eines zusammengesetzten MySQL-Index?

Als Faustregel gilt, dass in einem mehrspaltigen Index die Spalten mit der höchsten Kardinalität, oder mit anderen Worten, die höchste Anzahl unterschiedlicher Werte, im Index an erster Stelle stehen sollen.

Um genauer zu sein, möchten Sie zuerst die Spalte mit den wenigsten möglichen Übereinstimmungen mit Ihren Suchkriterien, damit Sie die Ergebnismenge so weit wie möglich eingrenzen können, aber im Allgemeinen ist es dasselbe wie die höchste Kardinalität.

In Ihrem Beispiel möchten Sie also, dass die Spalte mit Millionen unterschiedlicher Werte im Index vor der Spalte mit nur 6 unterschiedlichen Werten steht.

Angenommen, Sie wählen nur eine Zeile aus Millionen von Werten aus, können Sie so schneller mehr Zeilen entfernen.

Wenn Sie zwei Spalten mit ähnlicher Kardinalität betrachten, setzen Sie die kleinere zuerst (INTEGER Spalten vor VARCHAR Spalten), weil MySQL sie schneller vergleichen und durchlaufen kann.

Eine Einschränkung ist, dass wenn Sie mit Bereichen auswählen (z. B. WHERE datecol > NOW() ), dann möchten Sie die Bereichsspalten ganz rechts und Ihre Spalten mit einer einzigen Konstante (z. B. WHERE id = 1). ) Nach links. Das liegt daran, dass Ihr Index nur bis zum Punkt des ersten Bereichswerts zum Suchen und Ordnen verwendet werden kann.