Dieser Artikel stellt 13 Wissenspunkte über MySQL-Indizes vor. Ich glaube, dass er für Ihre Interviews sehr hilfreich sein wird.
Um ehrlich zu sein, ist das Wissen rund um den Datenbankindex wirklich kompliziert. Ursprünglich wollte ich einen genauen Blick auf diesen Aspekt werfen und dann einen Artikel darüber schreiben Später stellte ich fest, dass das Wissen über die Indizierung zu schwierig und zu tiefgreifend ist und es wirklich schwierig ist, umfassend und detailliert darüber zu sprechen. Deshalb habe ich am Ende das, was ich gelernt und gedacht habe, in die folgenden Fragen umgewandelt. Ich hoffe, es kann allen helfen!
Der Index ist ein wichtiges Konzept im Datenbanksystem. Es handelt sich um eine Datenstruktur, die zur Verbesserung der Effizienz der Datenbankabfrage verwendet wird Über das Inhaltsverzeichnis können wir schnell den Inhalt des entsprechenden Kapitels finden. Ebenso können wir über den Datenbankindex schnell den entsprechenden Datensatz in der Datentabelle finden. key
und ORDER BY
in der Datentabelle die Ergebnisse schnell abgerufen werden. GROUP BY
in sequentielle I/O
umwandeln, um hohe Festplattenkosten I/O
zu vermeiden und die Abfrageeffizienz zu verbessern. IO
MySQL-Video-Tutorial) Der Index von
wird auf der Ebene der Speicher-Engine implementiert, sodass jede Speicher-Engine unterschiedlich ist Implementierungsmethoden und derselbe Index wird auf unterschiedliche Weise verarbeitet. MySQL
-Anweisungen verwenden, die mit %
für Fuzzy-Matching beginnen, können Sie den Index nicht verwenden, z. B.: LIKE
SELECT * FROM users WHERE name LIKE '%小张%'; SELECT * FROM users WHERE name LIKE '%小张';
endet, können Sie dies tun Verwenden Sie den Index, zum Beispiel: %
SELECT * FROM users WHERE name LIKE '张%';
Es wird kein Index vor und nach der Anweisung verwendet. In der folgenden Anweisung hat beispielsweise OR
einen Index, aber 字段id
erstellt keinen ein Index. Dann kann die folgende Anweisung nur die gesamte Tabelle scannen und den Index nicht verwenden:字段name
SELECT * FROM users id = 10 or name='test'复制代码
Frage 5: Welche Datenstruktur wird am Ende des MySQL-Index verwendet?
In verwendet der Index in den meisten Fällen MySQL
als zugrunde liegende Datenstruktur. Tatsächlich verwenden verschiedene Speicher-Engines B-Tree
gibt es verschiedene Varianten, zum Beispiel wird B-Tree
anstelle von B-Tree
verwendet. InnoDB
B+Tree
Darüber hinaus gibt es einige spezielle Indexstrukturen, wie zum Beispiel Hash-Indizes. In
-Speicher-Engine Hash-Indizes. MySQL
Memory
Frage 6: Unter welchen Umständen ist eine Datentabelle nicht für die Erstellung eines Index geeignet?
2. Datentabellen mit einer relativ kleinen Datenmenge und Daten, die in Zukunft nicht viel wachsen werden, sollten keine Indizes erstellen, wie z. B. Datentabellen, die zum Speichern von Konfigurationen verwendet werden.
3. Wenn Änderungen häufig vorkommen und die Änderungsleistung viel größer ist als die Abfrageleistung, sollten keine weiteren Indizes erstellt werden.
Frage 7: Was ist ein Rücksendeformular?
InnoDB
Wenn wir nach Primärschlüssel abfragen, müssen wir nur den Suchbaum des Primärschlüsselindex durchsuchen, um die aufgezeichneten Daten direkt zu erhalten.
Wenn wir einen gewöhnlichen Index abfragen, müssen wir, nachdem wir die Adresse des Primärschlüssels durch Durchsuchen des Suchbaums des gewöhnlichen Index erhalten haben, auch den Primärschlüssel verwenden, um den Primärschlüssel-Suchbaum zu durchsuchen Der Vorgang wird als Tabellenrückgabe bezeichnet.
Frage 8: Was ist der Unterschied zwischen Clustered-Index und Nicht-Clustered-Index?
Nicht gruppierter Index: Die Indexreihenfolge hat nichts mit der physischen Anordnungsreihenfolge der Daten zu tun, und die Indexdateien und Daten werden separat gespeichert.
Frage 9: Was sind die Unterschiede zwischen MySQL-Primärschlüsselindex, eindeutigem Index und gewöhnlichem Index?
NULL
Bei Feldern, die als eindeutige Indizes festgelegt sind, dürfen ihre Feldwerte nicht wichtig sein.
普通索引可以包含重复的值,也可以为 NULL
。
索引作为一个数据表的目录,本身的存储就需要消耗很多的磁盘和内存存储空间。
并助在写入数据表数据时,每次都需要更新索引,所以索引越多,写入就越慢。
尤其是糟糕的索引,建得越多对数据库的性能影响越大。
MyISAM
存储引擎是非聚族索引,索引与数据是分开存储的,索引文件中记录了数据的指针
而 InnoDB
存储引擎是聚族索引,即索引跟数据是放在一块的, InnoDB
一般将主键与数据放在一块,如果没有主键,则将 unique key
作为主键,如果没有 unique key
,则自动创建一个 rowid
作为主键,其他二级索引叶子指针存储的是主键的位置。
MySQL
数据库不单可以为单个数据列创建索引,也可以为多个数据列创建一个联合索引,比如:
CREATE TABLE test( a INT NOT NOT, b INT NOT NOT, KEY(a,b) );
当我们使用下面的查询语句时,由于 WHERE
语句中查询的条件就是联合索引,所以可以很快查询到数据。
SELECT * FROM test WHERE a=1 AND b=1;
同样,下面的语句也会利用上面创建的联合索引,这是因为 MySQL
会按照索引创建的顺序进行排序,然后根据查询条件从索引最左边开始检测查询条件是否满足该索引,由于字段 a
在最左边,所以满足索引。
SELECT * FROM test WHERE a=1;
而使用 字段b
进行查询时,则为满足,因为从最左边匹配到的是 字段a
,所以 MySQL
判断为不满足索引条件。
SELECT * FROM test WHERE b=1;
从上面例子可以很好地了解索引的最左前缀原则,同时也说明了索引顺序的重要性。
如果一个索引中包含查询所要的字段时,此时不需要再回表查询,我们就称该索引为覆盖索引。
比如下面的查询中,字段id是主键索引,所以可以直接返回索引的值,显著提升了查询的性能。
SELECT id FROM users WHERE id BETWEEN 10 AND 20;
当然,上面列出的只是索引的一小部分知识点,有什么回答不对的地方,欢迎指出。
Das obige ist der detaillierte Inhalt von13 MySQL-Index-Wissenspunkte, die Sie beherrschen müssen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!