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

Beeinflusst ein zusammengesetzter Index mit einer zweiten Spalte mit niedriger Kardinalität die Leistung so stark, dass er verwendet werden sollte?

Die Kosten für die Verwaltung eines Index (einspaltig oder mehrspaltig) werden fast immer durch die Leistungsverbesserung bei Verwendung dieses Index aufgewogen. Es ist ein kleiner Schritt bei jedem INSERT /DELETE , zuzüglich Kosten, wenn der Wert eines indizierten Felds über UPDATE geändert wird . (Die UPDATE Fall ist selten.) Machen Sie sich also keine Sorgen über die Kosten für die "Pflege eines zusammengesetzten Index".

WHERE `vehicles`.`type` IN ('Car')
  AND `vehicles`.`user_id` = 10

benötigt INDEX(user_id, type) .

Der Optimierer wird

  1. entdecken Sie, dass dieser Index ein möglicher Kandidat ist,
  2. überprüfen Sie dann einige Statistiken
  3. Verwenden Sie entweder den Index oder entscheiden Sie sich für eine schlechte Kardinalität und scannen Sie einfach die Tabelle.

Fügen Sie den Index hinzu; Mach dir keine Sorgen.

Ich habe die Felder so angeordnet, nicht (type, user_id) basierend auf Ihrem IN , was impliziert, dass Sie manchmal mehrere Werte für type haben .

Wenn alle Zeilen in der Tabelle type = 'Car' haben , Kein Problem. Alles, was ich gesagt habe, gilt immer noch. Die Verschwendung des unnötigen type ist unbedeutend.

Es ist besser, alle "="-Spalten zuerst in einem Index zu haben, dann höchstens ein anderes Feld. Weitere Diskussion hier .