Heim > Datenbank > MySQL-Tutorial > Hauptteil

13 MySQL-Index-Wissenspunkte, die Sie beherrschen müssen

angryTom
Freigeben: 2020-02-14 17:55:59
nach vorne
2383 Leute haben es durchsucht

Dieser Artikel stellt 13 Wissenspunkte über MySQL-Indizes vor. Ich glaube, dass er für Ihre Interviews sehr hilfreich sein wird.

13 MySQL-Index-Wissenspunkte, die Sie beherrschen müssen

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!

Wissenspunkte

Frage 1: Was ist ein Datenbankindex?

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

Kurz gesagt ist der Index so, als würde man ein Verzeichnis für die Datentabelle erstellen.

Frage 2: Warum werden Indizes verwendet?

1. Durch die Verwendung von Indizes wird die Datenmenge, die die Speicher-Engine scannen muss, erheblich reduziert. Wenn keine Indizes verwendet werden, muss die Datentabelle nach jeder Datenzeile gescannt werden, was sehr langsam ist.

2. Da der Index sortiert wurde, können bei der Ausführung von Operationen wie

und ORDER BY in der Datentabelle die Ergebnisse schnell abgerufen werden. GROUP BY

3. Der Index kann zufällige

in sequentielle I/O umwandeln, um hohe Festplattenkosten I/O zu vermeiden und die Abfrageeffizienz zu verbessern. IO

Frage 3: In welchem ​​Modul ist der MySQL-Index implementiert?

(Empfohlenes kostenloses Lernvideo-Tutorial:

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

Frage 4: Warum funktioniert es nach dem Setzen des Index nicht?

Wenn Sie

-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 '%小张';
Nach dem Login kopieren

Wenn er jedoch mit

endet, können Sie dies tun Verwenden Sie den Index, zum Beispiel: %

SELECT * FROM users WHERE name LIKE '张%';
Nach dem Login kopieren

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'复制代码
Nach dem Login kopieren

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. InnoDBB+TreeDarüber hinaus gibt es einige spezielle Indexstrukturen, wie zum Beispiel Hash-Indizes. In

unterstützt nur die

-Speicher-Engine Hash-Indizes. MySQLMemoryFrage 6: Unter welchen Umständen ist eine Datentabelle nicht für die Erstellung eines Index geeignet?

1. Es wird nicht empfohlen, Indizes für Datentabellen zu erstellen, die zum Speichern archivierter historischer Daten verwendet werden und selten für Abfragen verwendet werden.

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?

Die Tabellenrückgabe gilt für die Innodb-Speicher-Engine. In der

-Speicher-Engine speichern die Blattknoten des Primärschlüsselindex die aufgezeichneten Daten, während die Blattknoten des gewöhnlichen Index den Speicherort des Primärschlüssels speichern Schlüsselindex.

InnoDBWenn 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?

Clustered-Index: Die Reihenfolge des Clustered-Index ist die physische Speicherreihenfolge der Daten, und der Index und die Daten werden zusammen platziert. Die Daten können direkt über den Index abgerufen werden in einer Datentabelle.

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?

Das als Primärschlüsselindex festgelegte Feld darf nicht

sein, und eine Datentabelle kann nur einen Primärschlüsselindex haben.

NULLBei Feldern, die als eindeutige Indizes festgelegt sind, dürfen ihre Feldwerte nicht wichtig sein.

普通索引可以包含重复的值,也可以为 NULL

问题10:索引可以提高查询性能,那是不是索引创建越多越好?

索引作为一个数据表的目录,本身的存储就需要消耗很多的磁盘和内存存储空间。

并助在写入数据表数据时,每次都需要更新索引,所以索引越多,写入就越慢。

尤其是糟糕的索引,建得越多对数据库的性能影响越大。

问题11:MyISAM与InnoDB在处理索引上有什么不同?

MyISAM 存储引擎是非聚族索引,索引与数据是分开存储的,索引文件中记录了数据的指针

InnoDB 存储引擎是聚族索引,即索引跟数据是放在一块的, InnoDB 一般将主键与数据放在一块,如果没有主键,则将 unique key 作为主键,如果没有 unique key ,则自动创建一个 rowid 作为主键,其他二级索引叶子指针存储的是主键的位置。

问题12:什么是索引的最左前缀原则?

MySQL 数据库不单可以为单个数据列创建索引,也可以为多个数据列创建一个联合索引,比如:

CREATE TABLE test(
    a INT NOT NOT,
    b INT NOT NOT,
    KEY(a,b)
);
Nach dem Login kopieren

当我们使用下面的查询语句时,由于 WHERE 语句中查询的条件就是联合索引,所以可以很快查询到数据。

SELECT * FROM test WHERE a=1 AND b=1;
Nach dem Login kopieren

同样,下面的语句也会利用上面创建的联合索引,这是因为 MySQL 会按照索引创建的顺序进行排序,然后根据查询条件从索引最左边开始检测查询条件是否满足该索引,由于字段 a 在最左边,所以满足索引。

SELECT * FROM test WHERE a=1;
Nach dem Login kopieren

而使用 字段b 进行查询时,则为满足,因为从最左边匹配到的是 字段a ,所以 MySQL 判断为不满足索引条件。

SELECT * FROM test WHERE b=1;
Nach dem Login kopieren

从上面例子可以很好地了解索引的最左前缀原则,同时也说明了索引顺序的重要性。

问题13:什么是覆盖索引?

如果一个索引中包含查询所要的字段时,此时不需要再回表查询,我们就称该索引为覆盖索引。

比如下面的查询中,字段id是主键索引,所以可以直接返回索引的值,显著提升了查询的性能。

SELECT id FROM users WHERE id BETWEEN 10 AND 20;
Nach dem Login kopieren

小结

当然,上面列出的只是索引的一小部分知识点,有什么回答不对的地方,欢迎指出。

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!

Verwandte Etiketten:
Quelle:cnblogs.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage