Ho molte tabelle in cui ho indici su chiavi esterne e indici cluster che includono quelle chiavi esterne. Per esempio, ho una tabella come la seguente:Overhead di indici compositi
TABLE: Item
------------------------
id PRIMARY KEY
owner FOREIGN KEY
status
... many more columns
MySQL genera gli indici per le chiavi primarie ed esterne, ma a volte, voglio migliorare le prestazioni delle query in modo creerò indici cluster o di copertura. Questo porta ad avere indici con colonne sovrapposte.
INDEXES ON: Item
------------------------
idx_owner (owner)
idx_owner_status (owner, status)
Se ho lasciato cadere idx_owner
, query future che normalmente utilizzare idx_owner
sarebbe solo usare idx_owner_status
poiché ha owner
come prima colonna nell'indice.
Vale la pena conservare idx_owner
? Esiste un overhead di I/O aggiuntivo per utilizzare idx_owner_status
anche se MySQL utilizza solo una parte dell'indice?
Modifica: Sono interessato solo al modo in cui InnoDB si comporta in relazione agli indici.