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

Unterschiede zwischen INDEX, PRIMARY, UNIQUE, FULLTEXT in MySQL?

Unterschiede

  • SCHLÜSSEL oder INDEX bezieht sich auf einen normalen nicht eindeutigen Index. Nicht eindeutige Werte für den Index sind erlaubt, also darf der Index enthalten Zeilen mit identischen Werten in allen Spalten des Index. Diese Indizes erzwingen keine Beschränkungen für Ihre Daten, sodass sie nur für den Zugriff verwendet werden - um schnell bestimmte Bereiche von Datensätzen zu erreichen, ohne alle Datensätze zu scannen.

  • EINZIGARTIG bezieht sich auf einen Index, bei dem alle Zeilen des Index eindeutig sein müssen. Das heißt, dieselbe Zeile darf nicht identische Nicht-NULL-Werte für alle Spalten in diesem Index haben wie eine andere Zeile. UNIQUE-Indizes werden nicht nur verwendet, um bestimmte Datensatzbereiche schnell zu erreichen, sondern können auch dazu verwendet werden, Beschränkungen für Daten durchzusetzen, da das Datenbanksystem nicht zulässt, dass die Regel der eindeutigen Werte beim Einfügen oder Aktualisieren von Daten gebrochen wird.

    Ihr Datenbanksystem kann die Anwendung eines UNIQUE-Index auf Spalten zulassen, die NULL-Werte zulassen. In diesem Fall dürfen zwei Zeilen identisch sein, wenn sie beide einen NULL-Wert enthalten (der Grund dafür ist, dass NULL als nicht gleich sich selbst betrachtet wird). Abhängig von Ihrer Anwendung können Sie dies jedoch darf finden Sie dies unerwünscht:Wenn Sie dies verhindern möchten, sollten Sie NULL-Werte in den entsprechenden Spalten verbieten.

  • PRIMÄR verhält sich genau wie ein UNIQUE-Index, außer dass er immer 'PRIMARY' heißt und es nur einen in einer Tabelle geben darf (und es sollte). sei immer eins; obwohl einige Datenbanksysteme dies nicht erzwingen). Ein PRIMARY-Index ist als primäres Mittel zur eindeutigen Identifizierung jeder Zeile in der Tabelle gedacht, daher sollte er im Gegensatz zu UNIQUE nicht für Spalten verwendet werden, die NULL-Werte zulassen. Ihr PRIMARY-Index sollte sich auf der kleinsten Anzahl von Spalten befinden, die ausreichen, um eine Zeile eindeutig zu identifizieren. Oft ist dies nur eine Spalte, die eine eindeutige, automatisch inkrementierte Nummer enthält, aber wenn es etwas anderes gibt, das eine Zeile eindeutig identifizieren kann, wie z. B. "Ländercode" in einer Länderliste, können Sie diese stattdessen verwenden.

    Einige Datenbanksysteme (wie InnoDB von MySQL) speichern die Datensätze einer Tabelle auf der Festplatte in der Reihenfolge, in der sie im PRIMARY-Index erscheinen.

  • VOLLTEXT Indizes unterscheiden sich von allen oben genannten, und ihr Verhalten unterscheidet sich erheblich zwischen Datenbanksystemen. FULLTEXT-Indizes sind nur für Volltextsuchen nützlich, die mit der MATCH() / AGAINST()-Klausel durchgeführt werden, im Gegensatz zu den drei oben genannten - die normalerweise intern mit B-Bäumen implementiert werden (die das Auswählen, Sortieren oder Bereiche beginnend in der Spalte ganz links ermöglichen) oder Hash-Tabellen (ermöglicht die Auswahl beginnend in der Spalte ganz links).

    Während die anderen Indextypen für allgemeine Zwecke bestimmt sind, ist ein FULLTEXT-Index darauf spezialisiert, dass er einem engen Zweck dient:Er wird nur für eine "Volltextsuche"-Funktion verwendet.

Ähnlichkeiten

  • Alle diese Indizes können mehr als eine Spalte enthalten.

  • Mit Ausnahme von FULLTEXT ist die Spaltenreihenfolge wichtig:Damit der Index in einer Abfrage nützlich ist, muss die Abfrage Spalten aus dem Index von links beginnend verwenden – sie kann nicht nur den zweiten, dritten oder vierten Teil einer verwenden index, es sei denn, es verwendet auch die vorherigen Spalten im Index, um statische Werte abzugleichen. (Damit ein FULLTEXT-Index für eine Abfrage nützlich ist, muss die Abfrage all verwenden Spalten des Index.)