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.
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 !
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.
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.
(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.
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 '%小张';
Cependant, s'il se termine par %
, vous pouvez utilisez l'index, tel que :
SELECT * FROM users WHERE name LIKE '张%';
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'复制代码
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.
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éé.
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.
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.
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
。
索引作为一个数据表的目录,本身的存储就需要消耗很多的磁盘和内存存储空间。
并助在写入数据表数据时,每次都需要更新索引,所以索引越多,写入就越慢。
尤其是糟糕的索引,建得越多对数据库的性能影响越大。
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;
当然,上面列出的只是索引的一小部分知识点,有什么回答不对的地方,欢迎指出。
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!