Maison > base de données > tutoriel mysql > 13 points de connaissances sur les index MySQL que vous devez maîtriser

13 points de connaissances sur les index MySQL que vous devez maîtriser

angryTom
Libérer: 2020-02-14 17:55:59
avant
2430 Les gens l'ont consulté

Cet article présente 13 points de connaissance de l'index MySQL. Je pense qu'il sera très utile pour votre entretien. Je vais maintenant le partager avec vous.

13 points de connaissances sur les index MySQL que vous devez maîtriser

Pour être honnête, les connaissances liées à l'index de base de données sont vraiment compliquées. Au départ, je voulais bien examiner cet aspect puis écrire un article pour en parler. Plus tard, j'ai trouvé que la connaissance de l'indexation est trop difficile et trop profonde, et qu'il est vraiment difficile d'en parler de manière complète et détaillée, donc à la fin j'ai transformé ce que j'ai appris et réfléchi en questions suivantes. J'espère que cela pourra aider tout le monde !

Points de connaissances

Question 1 : Qu'est-ce qu'un index de base de données ?

L'index de base de données est un concept important dans le système de base de données. L'index est également appelé key. Il s'agit d'une structure de données utilisée pour améliorer l'efficacité des requêtes de base de données. d'un livre. Grâce à la table des matières, nous pouvons trouver rapidement le contenu du chapitre correspondant. De même, grâce à l'index de la base de données, nous pouvons trouver rapidement l'enregistrement correspondant dans la table de données.

En bref, l'index revient à créer un répertoire pour la table de données.

Question 2 : Pourquoi les index sont-ils utilisés ?

1. L'utilisation d'index réduit considérablement la quantité de données que le moteur de stockage doit analyser. Si les index ne sont pas utilisés, la table de données doit être analysée pour chaque ligne de données, ce qui sera très lent.

2. Puisque l'index a été trié, lors de l'exécution d'opérations telles que ORDER BY et GROUP BY sur la table de données, les résultats peuvent être obtenus rapidement.

3. L'index peut convertir des I/O aléatoires en I/O séquentiels pour éviter des coûts de disque élevés IO et améliorer l'efficacité des requêtes.

Question 3 : Dans quel module l'index MySQL est-il implémenté ?

(Tutoriel vidéo d'apprentissage gratuit recommandé : Tutoriel vidéo MySQL) L'index de

MySQL est implémenté au niveau de la couche du moteur de stockage, donc chaque moteur de stockage Il existe différents méthodes d'implémentation, et le même index est traité de différentes manières.

Question 4 : Pourquoi cela ne fonctionne-t-il pas après avoir défini l'index ?

Si vous utilisez des instructions % commençant par LIKE pour une correspondance floue, vous ne pouvez pas utiliser l'index, tel que :

SELECT * FROM users WHERE name LIKE '%小张%';

SELECT * FROM users WHERE name LIKE '%小张';
Copier après la connexion

Cependant, s'il se termine par %, vous pouvez utilisez l'index, tel que :

SELECT * FROM users WHERE name LIKE '张%';
Copier après la connexion

OR Aucun index n'est utilisé avant et après l'instruction. Par exemple, dans l'instruction suivante, 字段id a un index, mais 字段name ne crée pas. un index. Ensuite, l'instruction suivante ne peut analyser que la table entière et ne peut pas utiliser l'index :

SELECT * FROM users id = 10 or name='test'复制代码
Copier après la connexion

Question 5 : Quelle structure de données est utilisée en bas de l'index MySQL ?

Dans MySQL, dans la plupart des cas, l'index utilise B-Tree comme structure de données sous-jacente B-Tree est juste un nom général. En fait, différents moteurs de stockage utilisent B-Tree Là. sont des variantes différentes, par exemple InnoDB est utilisé à la place de B+Tree .

De plus, il existe des structures d'index spéciales, telles que les index de hachage. La couche inférieure des index de hachage utilise des tables de hachage. Dans MySQL, seul le moteur de stockage Memory prend en charge les index de hachage.

Question 6 : Dans quelles circonstances un tableau de données ne convient-il pas pour créer un index ?

1. Il n'est pas recommandé de créer des index pour les tables de données utilisées pour stocker des données historiques archivées et rarement utilisées pour les requêtes.

2. Les tables de données avec une quantité de données relativement faible et des données qui n'augmenteront pas beaucoup à l'avenir ne doivent pas créer d'index, telles que les tables de données utilisées pour enregistrer les configurations.

3. Lorsque les modifications sont fréquentes et que les performances de modification sont bien supérieures aux performances des requêtes, aucun index supplémentaire ne doit être créé.

Question 7 : Qu'est-ce qu'un formulaire de retour ?

Le retour de table est destiné au moteur de stockage Innodb Dans le moteur de stockage InnoDB, les nœuds feuilles de l'index de clé primaire stockent les données enregistrées, tandis que les nœuds feuilles de l'index ordinaire stockent l'emplacement de la clé primaire. index clé.

Lorsque nous interrogeons par clé primaire, il suffit de rechercher dans l'arbre de recherche de l'index de clé primaire pour obtenir directement les données enregistrées.

Lorsque nous effectuons une requête via un index ordinaire, après avoir obtenu l'adresse de la clé primaire en recherchant l'arbre de recherche de l'index ordinaire, nous devons également utiliser la clé primaire pour rechercher l'arbre de recherche de clé primaire. Le processus est appelé retour de table.

Question 8 : Quelle est la différence entre un index clusterisé et un index non clusterisé ?

Index clusterisé : l'ordre de l'index clusterisé est l'ordre de stockage physique des données, et l'index et les données sont placés ensemble. Les données peuvent être obtenues directement via l'index. dans un tableau de données.

Index non clusterisé : l'ordre de l'index n'a rien à voir avec l'ordre de disposition physique des données, et les fichiers d'index et les données sont stockés séparément.

Question 9 : Quelles sont les différences entre l'index de clé primaire MySQL, l'index unique et l'index ordinaire ?

Le champ défini comme index de clé primaire ne peut pas être NULL, et une table de données ne peut avoir qu'un seul index de clé primaire.

Pour les champs définis comme index uniques, leurs valeurs de champ ne peuvent pas être importantes.

普通索引可以包含重复的值,也可以为 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)
);
Copier après la connexion

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

SELECT * FROM test WHERE a=1 AND b=1;
Copier après la connexion

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

SELECT * FROM test WHERE a=1;
Copier après la connexion

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

SELECT * FROM test WHERE b=1;
Copier après la connexion

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

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

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

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

SELECT id FROM users WHERE id BETWEEN 10 AND 20;
Copier après la connexion

小结

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:cnblogs.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal