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
- entdecken Sie, dass dieser Index ein möglicher Kandidat ist,
- überprüfen Sie dann einige Statistiken
- 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 .