Ich habe viele Tabellen, wo ich Indizes für Fremdschlüssel und Clustered-Indizes, die diese Fremdschlüssel enthalten. Zum Beispiel habe ich eine Tabelle wie folgt aus:Overhead von Composite-Indizes
TABLE: Item
------------------------
id PRIMARY KEY
owner FOREIGN KEY
status
... many more columns
MySQL Indizes für Primär- und Fremdschlüssel erzeugt, aber manchmal möchte ich die Abfrageleistung verbessern, so werde ich gruppierten oder Abdeckung Indizes erstellen. Dies führt zu Indizes mit überlappenden Spalten.
INDEXES ON: Item
------------------------
idx_owner (owner)
idx_owner_status (owner, status)
Wenn ich fallen gelassen idx_owner
, zukünftige Anfragen, die normalerweise nur idx_owner
idx_owner_status
verwenden würde würde verwenden, da es owner
als die erste Spalte im Index hat.
Lohnt es sich, idx_owner
herum zu halten? Gibt es einen zusätzlichen I/O-Overhead, um idx_owner_status
zu verwenden, obwohl MySQL nur einen Teil des Index verwendet?
Edit: Ich bin wirklich nur in der Art interessiert InnoDB verhält sich in Bezug auf Indizes.