Heim >Datenbank >MySQL-Tutorial >Was ist der Unterschied zwischen MySQL-Clustered-Index und Nicht-Clustered-Index?
Unterschied: 1. Ein Clustered-Index speichert die Daten in der Tabelle an den Blattknoten, während ein Nicht-Clustered-Index die Primärschlüssel- und Indexspalten an den Blattknoten speichert. 2. Die Reihenfolge der Tabellendatensätze im Clustered-Index stimmt mit der Reihenfolge des Index überein, die Sortierreihenfolge der nicht gruppierten Indizes ist inkonsistent. 3. Jede Tabelle kann nur einen gruppierten Index haben, es können jedoch mehrere nicht gruppierte Indizes vorhanden sein.
Die Betriebsumgebung dieses Tutorials: Windows7-System, MySQL8-Version, Dell G3-Computer.
Die Indizes der Innodb-Speicher-Engine von MySQL sind in zwei Kategorien unterteilt: Clustered-Indizes und Nicht-Cluster-Indizes. Sie können Cluster-Indizes und Nicht-Cluster-Indizes verstehen, indem Sie die Indizes des chinesischen Wörterbuchs vergleichen. Das chinesische Wörterbuch bietet zwei Möglichkeiten zum Abrufen chinesischer Schriftzeichen. Die erste ist die Pinyin-Recherche (vorausgesetzt, die Aussprache des chinesischen Schriftzeichens ist bekannt). Die Seitenzahl des entsprechenden chinesischen Zeichens wird anhand des Pinyin gefunden (da durch Drücken der Pinyin-Sortierung die binäre Suche schnell erfolgen kann). Dies ist das, was wir normalerweise als Wörterbuchreihenfolge bezeichnen und das entsprechende Chinesisch finden Ordnen Sie die Zeichen entsprechend den Strichen zu und ermitteln Sie die Seitenzahl, die dem chinesischen Schriftzeichen entspricht. Beim Pinyin-Abruf handelt es sich um einen Clustered-Index, da die gespeicherten Datensätze (Zeilendaten in der Datenbank, detaillierte Datensätze chinesischer Schriftzeichen im Wörterbuch) nach diesem Index sortiert sind, obwohl Wörter mit denselben Strichen im Strichindex benachbart sind. die eigentliche Speicherung Die Seitenzahlen liegen nicht nebeneinander, es handelt sich um einen nicht gruppierten Index.
Die logische Reihenfolge der Schlüsselwerte im Index bestimmt die physische Reihenfolge der entsprechenden Zeilen in der Tabelle.
Ein Clustered-Index bestimmt die physische Reihenfolge der Daten in einer Tabelle. Ein Clustered-Index ähnelt einem Telefonbuch, da die Daten nach Nachnamen geordnet sind. Clustered-Indizes sind besonders effektiv für Spalten, in denen häufig nach Bereichswerten gesucht wird. Sobald Sie einen Clustered-Index verwenden, um die Zeile mit dem ersten Wert zu finden, können Sie sicherstellen, dass Zeilen mit nachfolgenden Indexwerten physisch benachbart sind. Wenn Ihre Anwendung beispielsweise eine Abfrage durchführt, die häufig Datensätze innerhalb eines bestimmten Datumsbereichs abruft, können Sie einen Clustered-Index verwenden, um schnell die Zeile mit dem Startdatum zu finden und dann alle angrenzenden Zeilen in der Tabelle abzurufen, bis das Enddatum erreicht ist. Dies trägt dazu bei, die Leistung solcher Abfragen zu verbessern. Wenn eine Spalte beim Sortieren von aus einer Tabelle abgerufenen Daten häufig verwendet wird, kann die Tabelle entsprechend in dieser Spalte gruppiert (physisch sortiert) werden, um Kosten zu sparen, da sie nicht jedes Mal sortiert werden muss, wenn diese Spalte abgefragt wird.
Das Obige ist die B+Tree-Indexstruktur von innodb
Wir wissen, dass B+Tree aus B-Tree die folgenden Eigenschaften hat:
1 kann höchstens m untergeordnete Knoten haben.
2. Mit Ausnahme des Wurzelknotens und der Blattknoten verfügt jeder Knoten über mindestens m/2 (aufgerundet) untergeordnete Knoten.
3. Wenn der Wurzelknoten kein Blattknoten ist, enthält der Wurzelknoten mindestens zwei untergeordnete Knoten.
4. Alle Blattknoten befinden sich auf derselben Ebene.
5. Jeder Knoten enthält k Elemente (Schlüsselwörter), wobei m/2≤k6. Die Elemente (Schlüsselwörter) in jedem Knoten sind von klein nach groß angeordnet.
7. Der Wert des linken Knotens jedes Elements (Schlüsselwort) ist kleiner oder gleich dem Element (Schlüsselwort). Die Werte des rechten Knotens sind größer oder gleich dem Element (Schlüsselwort).
Die Merkmale von b+tree sind:
1. Alle Nicht-Blattknoten speichern nur Schlüsselwortinformationen.
2. Alle Satellitendaten (spezifische Daten) werden in Blattknoten gespeichert.
3. Alle Blattknoten enthalten Informationen zu allen Elementen.
4. Zwischen allen Blattknoten gibt es einen Linkzeiger.
Wir haben festgestellt, dass b+trre die folgenden Eigenschaften aufweist:
Die logische Reihenfolge der Indizes im Index unterscheidet sich von der physischen Speicherreihenfolge der vorgelagerten Festplatte.
Tatsächlich sind andere Indizes als gruppierte Indizes per Definition nicht gruppierte Indizes, aber die Leute möchten nicht gruppierte Indizes in gewöhnliche Indizes, eindeutige Indizes und Volltextindizes unterteilen. Wenn wir den nicht gruppierten Index mit etwas im wirklichen Leben vergleichen müssen, dann ist der nicht gruppierte Index wie das radikale Wörterbuch des Xinhua-Wörterbuchs, und seine strukturelle Reihenfolge stimmt nicht unbedingt mit der tatsächlichen Speicherreihenfolge überein.
Die Speicherstruktur des nicht gruppierten Index ist dieselbe wie zuvor. Der Unterschied besteht darin, dass der Datenteil des Blattknotens keine spezifischen Daten mehr speichert, sondern den Schlüssel des gruppierten Index der Daten. Daher besteht der Prozess der Suche in einem nicht gruppierten Index darin, zunächst den Schlüssel des gruppierten Index zu finden, der dem Indexschlüssel entspricht, und dann den Schlüssel des gruppierten Index zu verwenden, um die entsprechenden Daten im Primärschlüsselindexbaum zu finden Der Vorgang heißt Tabellenrückgabe!
Geben Sie mir ein Beispiel:
create table student ( `id` INT UNSIGNED AUTO_INCREMENT, `username` VARCHAR(255), `score` INT, PRIMARY KEY(`id`), KEY(`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Clustered-Index, Clustered-Index (ID), Nicht-Clustered-Index-Index (Benutzername).
使用以下语句进行查询,不需要进行二次查询,直接就可以从非聚集索引的节点里面就可以获取到查询列的数据。
select id, username from t1 where username = '小明' select username from t1 where username = '小明'
但是使用以下语句进行查询,就需要二次的查询去获取原数据行的score:
select username, score from t1 where username = '小明'
区别一:
聚集索引:就是以主键创建的索引,在叶子节点存储的是表中的数据
非聚集索引:就是以非主键创建的索引(也叫做二级索引),在叶子节点存储的是主键和索引列。
区别二:
聚集索引中表记录的排列顺序和索引的排列顺序一致;所以查询效率快,因为只要找到第一个索引值记录,其余的连续性的记录在物理表中也会连续存放,一起就可以查询到。缺点:新增比较慢,因为为了保证表中记录的物理顺序和索引顺序一致,在记录插入的时候,会对数据页重新排序。
非聚集索引中表记录的排列顺序和索引的排列顺序不一致。
区别三:
聚集索引是物理上连续存在,而非聚集索引是逻辑上的连续,物理存储不连续。
区别四:
聚集索引每张表只能有一个,非聚集索引可以有多个。
【相关推荐:mysql视频教程】
Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen MySQL-Clustered-Index und Nicht-Clustered-Index?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!