Der Unterschied zwischen Schlüssel und Index in MySQL

Der Unterschied zwischen Schlüssel und Index in MySQL

Schauen wir uns zunächst den Code an:

ALTER TABLE reportblockdetail ADD KEY taskcode (Aufgabencode)
ALTER TABLE reportblockdetail DROP KEY taskcode

Nun, hier wird es tatsächlich verwirrend.

Bei der Verwendung von MySQL achten wir möglicherweise nicht auf dieses Problem, da sie in den meisten Fällen ähnliche Effekte aufweisen, aber dennoch nicht gleichgesetzt werden können (zumindest theoretisch).

Der Unterschied zwischen einem Index und einem Schlüssel liegt in ihren unterschiedlichen Ausgangspunkten. Der Index ist für die Aufrechterhaltung der Such- und Betriebsgeschwindigkeit der Tabelle verantwortlich, während der Schlüssel für die Aufrechterhaltung der Integrität der Tabelle verantwortlich ist.

Wenn diese Verwirrung bei Ihnen auftritt, liegt dies wahrscheinlich an einem seltsamen Phänomen in MySQL:

  • Indizes in MySQL sind Constraint-Indizes (das heißt, beim Erstellen eines Indexes wird automatisch ein Constraint erstellt)
  • Und das Erstellen von Einschränkungen in MySQL geht automatisch mit Indizes einher.

Das ist doch seltsam, oder? Es sind zwei verschiedene Dinge, aber wenn sie erschaffen werden, werden sie miteinander verbunden. Warum ist das so? Denn die Gründe sind:

Der Einschränkungseffekt in MySQL wird durch Indizes erreicht. Die MySQL-Datenbank bestimmt durch eindeutige Indizes, ob die aktuelle Spalte eindeutig ist.

Lassen Sie uns abschließend zusammenfassen:

  • Zu den Constraints zählen Primärschlüssel-Constraints, Unique-Constraints, Fremdschlüssel-Constraints, Not-Null-Constraints, Check-Constraints (Check-Constraints können in MySQL überhaupt nicht verwendet werden, können aber normal festgelegt werden) usw.
  • Zu den Indizes zählen allgemeine Indizes, Primärschlüsselindizes, eindeutige Indizes, gemeinsame Indizes, Volltextindizes usw.
  • Beides kann beim Erstellen einer Tabelle erreicht werden. Nachdem die Tabelle erstellt wurde, kann sie mit der ALTER-Anweisung erstellt und gelöscht werden. Für spezifische Anweisungen suchen Sie bitte bei Baidu nach den beiden oben genannten Punkten. Ich habe sie in MySQL5.5 und der InnoDB-Speicher-Engine getestet.

Theoretisch können MySQL-Schlüssel und -Index nicht gleichgesetzt werden, sie sind nicht dasselbe, aber in der tatsächlichen Verwendung gibt es grundsätzlich keinen Unterschied zwischen ihnen.

Inhaltserweiterung:

Unterschied zwischen Schlüssel und Primärschlüssel

CREATE TABLE wh_logrecord ( 
logrecord_id int(11) NICHT NULL auto_increment, 
Benutzername varchar(100) Standard NULL, 
operation_time datetime Standard NULL, 
logrecord_operation varchar(100) Standardwert NULL, 
PRIMÄRSCHLÜSSEL (logrecord_id), 
SCHLÜSSEL wh_logrecord_user_name (Benutzername) 
)

Unterschied zwischen KEY und INDEX

Hinweis: Dieser Teil verwirrt mich immer noch.
KEY ist oft ein Synonym für INDEX. PRIMARY KEY kann auch nur als KEY angegeben werden, wenn das Schlüsselwortattribut PRIMARY KEY in der Spaltendefinition angegeben ist. Dies geschieht aus Kompatibilitätsgründen mit anderen Datenbanksystemen. PRIMARY KEY ist ein eindeutiger SCHLÜSSEL. In diesem Fall müssen alle Schlüsselwortspalten als NOT NULL definiert werden. Wenn die Spalten nicht explizit als NOT NULL definiert sind, sollte MySQL sie implizit definieren. Eine Tabelle hat nur einen PRIMÄRSCHLÜSSEL.

Der Unterschied zwischen Index und Schlüssel in MySQL

Der Schlüssel ist der Schlüsselwert, der Teil der relationalen Modelltheorie ist. Beispielsweise gibt es Primärschlüssel und Fremdschlüssel, die für Datenintegritätsprüfungen und Eindeutigkeitsbeschränkungen verwendet werden. Der Index befindet sich auf Implementierungsebene. Sie können beispielsweise einen Index für jede Spalte in einer Tabelle erstellen. Wenn sich die indizierte Spalte dann in der Where-Bedingung in der SQL-Anweisung befindet, können Sie die Daten schnell finden und abrufen. Was den Unique Index betrifft, handelt es sich lediglich um einen Indextyp. Die Einrichtung eines Unique Index bedeutet, dass die Daten in dieser Spalte nicht wiederholt werden können. Ich vermute, dass MySQL weitere spezielle Optimierungen für Indizes vom Typ Unique Index vornehmen kann.

Daher muss sich der Schlüssel beim Entwerfen einer Tabelle nur auf Modellebene befinden, und wenn eine Abfrageoptimierung erforderlich ist, können Indizes für die relevanten Spalten erstellt werden.

Darüber hinaus hat MySQL für eine Primärschlüsselspalte automatisch einen eindeutigen Index erstellt, sodass kein erneuter Index dafür erforderlich ist.

Oben finden Sie detaillierte Informationen zum Unterschied zwischen Schlüssel und Index in MySQL. Weitere Informationen zum Unterschied zwischen Schlüssel und Index in MySQL finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Der Unterschied zwischen KEY, PRIMARY KEY, UNIQUE KEY und INDEX in MySQL
  • Der Unterschied zwischen Schlüssel, Primärschlüssel, eindeutigem Schlüssel und Index in MySQL
  • Kann „Create Index“ in MySQL einen Primärschlüssel erstellen?

<<:  Fallstudie zu JavaScript-Funktionsaufrufen, Apply- und Bind-Methoden

>>:  So installieren Sie Elasticsearch und Kibana in Docker

Artikel empfehlen

Detaillierte Erklärung der Verwendung von Nginx proxy_redirect

Heute bin ich auf ein kleines Problem gestoßen, a...

Implementierung des HTML-Gleit- und Schwebeball-Menüeffekts

CSS-Stile html,Text{ Breite: 100 %; Höhe: 100%; R...

XHTML-Tags haben ein schließendes Tag

<br />Ursprünglicher Link: http://www.dudo.o...

JavaScript zum Erzielen des JD.com-Blitzverkaufseffekts

In diesem Artikel wird der spezifische JavaScript...

Das WeChat-Applet implementiert das Schlangenspiel

In diesem Artikel wird der spezifische Code des W...

Lösung für Ubuntu, das keine Verbindung zum Internet herstellen kann

Problembeschreibung: Ich habe einen Desktop-Compu...

So verwenden Sie residente Knoten für die Ebenenverwaltung in CocosCreator

CocosCreator-Version: 2.3.4 Die meisten Spiele ve...

So verwenden Sie Vuex in einem Vue-Projekt

Inhaltsverzeichnis Was ist Vuex? Vuex-Nutzungszyk...