Ich bin mit dem folgenden konfrontiert und ich bin mir nicht sicher, was Best Practice ist.Zwei einspaltige Indizes gegenüber einem zweispaltigen Index in MySQL?
Betrachten Sie die folgende Tabelle (die große erhalten):
id PK | Geber_ID FK | recipient_id FK | Datum
Ich verwende InnoDB und von was ich verstehe, erstellt es Indizes automatisch für die zwei Fremdschlüsselspalten. Ich werde aber auch viele Abfragen durchführen, bei denen ich eine bestimmte Kombination von:
SELECT...WHERE giver_id = x AND recipient_id = t
.
Jede solche Kombination wird in der Tabelle eindeutig sein.
Gibt es einen Vorteil, wenn Sie einen zweispaltigen Index über diese Spalten hinzufügen, oder wären die beiden einzelnen Indizes theoretisch ausreichend/gleich?
'MySQL kann nur einen Index pro SELECT verwenden 'das ist nicht mehr wahr, es wäre nett, wenn Sie Ihre Antwort bearbeitet, um aktualisiert zu werden. – Davor
Würde es Ihnen etwas ausmachen zu erklären, warum der Deckungsindex nicht von 'recipient_id' verwendet werden könnte? –
@IvoPereira Bei Multi-Spalten-Indizes in MySQL können Sie alle Felder im Index von links nach rechts verwenden. Wenn Sie zum Beispiel einen 'INDEX (col1, col2, col3, col4)' 'haben, wird der Index für Suchen mit einer' WHERE'-Klausel wie 'col1 = 'A'' oder' col1 =' A 'AND col2 = angewendet 'B'' oder 'col1 =' A 'AND col2 =' B 'UND col3 =' C 'AND col4 =' D'', aber dieser spezielle Index wird nicht verwendet für' WHERE col2 =' B ' 'oder' WHERE col3 = 'C' UND col4 = 'D'', weil die Suchfelder in der Indexdefinition nicht am weitesten links liegen. Sie müssten zusätzliche Indizes hinzufügen, um diese Felder abzudecken. – Slicktrick