Wie ist INDEX auf zusammengesetzten Primärschlüsseln in MySQL?

11

Wenn Sie einen zusammengesetzten Primärschlüssel für zwei oder mehr Spalten erstellen, z PRIMARY KEY(col1, col2, col3). Wird das System INDEXjede Spalte einzeln?

Der Grund , dass ich diese Frage bin zu fragen ist , dass , wenn wir verwenden UNIQUE INDEX (col1, col2, col3), ist es wie wirkt INDEXfür die erste Spalte nur, und wir müssen zusätzliche erstellen INDEXs für andere Spalten. Ich möchte wissen, ob dies auch für den zusammengesetzten Primärschlüssel der Fall ist.

Googlebot
quelle

Antworten:

15
  1. Der zusammengesetzte Primärindex stellt immer sicher, dass die Kombination der Werte für col1, col2, col3 eindeutig ist. Wenn der Index sicherstellen soll, dass die Werte eindeutig sind, haben Sie dies erreicht

  2. Ein zusammengesetzter Index bietet auch Indexübereinstimmungen für eine beliebige Kombination der Spalten col1, col2 und col3

  3. Sie würden separate Indizes für col2 und col3 erstellen, wenn Sie eine der Spalten ohne die anderen verbinden oder filtern.

  4. Ich bevorzuge immer einen numerischen Primärschlüssel (ohne Geschäftszuordnung) und eindeutige Indizes gegenüber einem zusammengesetzten Primärschlüssel, falls erforderlich.

Stephen Senkomago Musoke
quelle
+1 für diese Punkte, insbesondere für Punkt 2 in den Ereignisabfragen, haben GROUP BY-Klauseln und ORDER BY-Klauseln, die unterschiedliche zusammengesetzte Indexkombinationen benötigen.
RolandoMySQLDBA
gute Argumente! Dann ähnelt der zusammengesetzte Primärschlüssel dem UNIQUE INDEX, und wir haben keinen Index für die Spalten 2nd, 3rd, ..., um schnell eine Zeile abzurufen.
Googlebot
1
@Andy # 3 ist zusätzlich zu einem zusammengesetzten Index von col1, col2 und col3, sodass der zusammengesetzte Index verwendet wird. Wenn Sie jedoch nach col2 und col3 ohne col1 filtern, benötigen Sie für jeden von ihnen separate Indizes
Stephen Senkomago Musoke
2
Ein Index für col1, col2 und col3 bedeutet, dass SELECT * FROM col1 = 10 effizient ist, da col1 die erste Spalte im Index ist. Mit # 3 können Sie dasselbe für col2 und col3 tun Filtern Sie nach diesen Spalten allein ohne Spalte1, dann werden auch die Spalten indiziert
Stephen Senkomago Musoke
1
@PaulWasilewski Ja, es gibt zwar Sonderfälle, in denen ein zusammengesetzter Primärschlüssel sinnvoll ist, aber dies sind nur Sonderfälle.
Stephen Senkomago Musoke