Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Spielt die Reihenfolge der Felder des mehrspaltigen Index in MySQL eine Rolle?

Wenn ich mehrspaltige Verzeichnisse bespreche, verwende ich eine Analogie zu einem Telefonbuch. Ein Telefonbuch ist im Grunde ein Verzeichnis von Nachnamen, dann Vornamen. Die Sortierreihenfolge wird also dadurch bestimmt, welche "Spalte" zuerst kommt. Suchen fallen in einige Kategorien:

  1. Wenn Sie nach Personen suchen, deren Nachname Smith ist, können Sie sie leicht finden, da das Buch nach Nachnamen sortiert ist.

  2. Wenn Sie Leute suchen, deren Vorname John ist, hilft das Telefonbuch nicht weiter, weil die Johns im ganzen Buch verstreut sind. Sie müssen das gesamte Telefonbuch durchsuchen, um sie alle zu finden.

  3. Wenn Sie Personen mit einem bestimmten Nachnamen Smith und einem bestimmten Vornamen John suchen, hilft das Buch, da Sie die Smiths zusammen sortiert finden, und innerhalb dieser Gruppe von Smiths werden die Johns auch in sortierter Reihenfolge gefunden.

Wenn Sie ein Telefonbuch hätten, das nach Vornamen und dann nach Nachnamen sortiert wäre, würde Ihnen die Sortierung des Buchs in den obigen Fällen #2 und #3 helfen, aber nicht in Fall #1.

Das erklärt Fälle für das Nachschlagen exakter Werte, aber was ist, wenn Sie nach Wertebereichen suchen? Angenommen, Sie möchten alle Personen finden, deren Vorname John ist und deren Nachname mit „S“ beginnt (Smith, Saunders, Staunton, Sherman usw.). Die Johns werden unter „J“ innerhalb jedes Nachnamens sortiert, aber wenn Sie alle Johns für alle Nachnamen haben möchten, die mit „S“ beginnen, werden die Johns nicht zusammen gruppiert. Sie sind wieder verstreut, sodass Sie am Ende alle Namen durchsuchen müssen, deren Nachname mit „S“ beginnt. Wenn das Telefonbuch dagegen nach Vornamen und dann nach Nachnamen organisiert wäre, würden Sie alle Johns zusammen finden, dann würden innerhalb der Johns alle 'S'-Nachnamen zusammen gruppiert.

Daher ist die Reihenfolge der Spalten in einem mehrspaltigen Index definitiv wichtig. Ein Abfragetyp benötigt möglicherweise eine bestimmte Spaltenreihenfolge für den Index. Wenn Sie mehrere Arten von Abfragen haben, benötigen Sie möglicherweise mehrere Indizes, um ihnen zu helfen, mit Spalten in unterschiedlichen Reihenfolgen.

Sie können meine Präsentation How to Design Indexes, Really lesen für weitere Informationen.