Maison >base de données >tutoriel mysql >Quels sont les avantages et les inconvénients de l'index clusterisé MySQL

Quels sont les avantages et les inconvénients de l'index clusterisé MySQL

王林
王林avant
2023-05-27 21:43:111459parcourir

1. Qu'est-ce qu'un index clusterisé ?

Les index de base de données peuvent être divisés en différents types selon différentes perspectives, et l'index clusterisé en fait partie.

L'index clusterisé en anglais est un index clusterisé. Parfois, vous pouvez voir certaines personnes l'appeler index clusterisé, etc. L'opposé est un index non clusterisé ou un index secondaire.

L'index clusterisé n'est pas un type d'index distinct, mais un moyen de stocker des données. Dans le moteur de stockage InnoDB de MySQL, ce que l'on appelle l'index clusterisé stocke en fait l'index et les lignes de données dans le même B+Tree : À ce stade, les données sont placées dans les nœuds feuilles, regroupés, ce qui signifie les lignes de données et les valeurs clés correspondantes. existent de manière compacte ensemble. 9 9

Shenzhen

Homme
2 ac 98 Guangzhou Homme
3 af 88 Beijing Femme
4 bc 80 Shanghai Femme
5 bg 85 Chongqing femelle
6 bw 95 Tianjin male
7 bw 99 Haikou Femme
8 cc 92 Wuhan Homme
9 ck 90 Shenzhen Homme
10 cx 93 Shenzhen Homme

Ensuite, son index clusterisé ressemble probablement à ceci :

Quels sont les avantages et les inconvénients de lindex clusterisé MySQL

Ensuite, vous pouvez voir qu'il y a les deux valeurs de clé primaire (index) sur les feuilles) et il y a des lignes de données, et il n'y a que des valeurs de clé primaire (index) sur les nœuds.

Pensez-y les amis, les données de la table MySQL ne peuvent être enregistrées qu'en une seule copie sur le disque, et il est impossible d'en enregistrer deux copies. Par conséquent, dans une table, il ne peut y en avoir qu'une seule. un index clusterisé, non Il peut y en avoir plusieurs.

2. Index clusterisé et clé primaire

Certains amis sont confus quant à la relation entre les deux et assimilent même les deux.

Dans certaines bases de données, les développeurs sont autorisés à choisir librement quel index utiliser comme index clusterisé, mais cette fonctionnalité n'est pas prise en charge dans MySQL.

Dans MySQL, si la table elle-même a un jeu de clés primaires, alors la clé primaire est l'index clusterisé ; si la table elle-même ne définit pas de clé primaire, un index unique et non vide dans le La table sera sélectionnée comme index clusterisé ; s’il n’y a pas d’index unique non vide dans la table, la clé primaire implicite de la table sera automatiquement sélectionnée comme index clusterisé. Brother Song vous présentera la clé primaire implicite des tables MySQL dans les prochains articles.

Cependant, de manière générale, il est recommandé de définir vous-même la clé primaire de la table, car la clé primaire implicite est auto-incrémentée et il y aura un problème avec l'auto-incrémentation. incrémentation : il y aura une valeur d'auto-incrémentation. Dans le cas d'une concurrence de verrouillage très élevée, la limite supérieure de la clé primaire sera appelée données chaudes. Parce que toutes les opérations d'insertion nécessitent que la clé primaire soit incrémentée et ne peuvent pas être répétées, concurrence de verrouillage. se produira et les performances diminueront.

Selon l'introduction ci-dessus, nous pouvons résumer la relation entre l'index clusterisé et l'index de clé primaire dans MySQL comme suit :

  • #🎜🎜 #cluster Un index de cluster n'est pas nécessairement un index de clé primaire.

  • L'index de clé primaire doit être un index clusterisé.

3. Avantages et inconvénients de l'index clusterisé

Parlons d'abord des avantages :

    #🎜 🎜#Nous pouvons enregistrer les données associées ensemble. Par exemple, il existe un tableau de commande d'utilisateur. Nous pouvons regrouper toutes les données en fonction de
  • ID d'utilisateur + ID de commande

    . Les ID d'utilisateur peuvent être répétés, mais les ID de commande ne seront pas répétés. peut associer un utilisateur à Les données de commande sont toutes stockées ensemble. Si vous devez interroger toutes les commandes d'un utilisateur, cela sera très rapide et ne nécessite qu'une petite quantité d'E/S disque.

  • Pas besoin de retourner la table, l'accès aux données est donc plus rapide. Dans un index clusterisé, l'index et les données se trouvent sur le même B+Tree, donc l'obtention de données à partir de l'index clusterisé est plus rapide que l'obtention de données à partir d'un index non clusterisé (les index non clusterisés nécessitent un support de table).
  • Pour le premier cas, si nous voulons interroger tous les identifiants de commande de cet utilisateur en fonction de l'identifiant utilisateur, alors il n'est pas nécessaire d'aller sur le nœud feuille À ce stade, étant donné que les données dont nous avons besoin se trouvent sur le nœud de support, nous pouvons directement utiliser les caractéristiques de l'index de couverture pour lire les données requises.
  • Ce sont quelques avantages courants des index clusterisés. En fait, nous devrions tirer pleinement parti de ces avantages dans la conception de tables quotidiennes.

Jetons un coup d'œil aux inconvénients :

    Mes amis ont découvert que l'avantage de l'index clusterisé que nous avons mentionné plus tôt est principalement que l'index clusterisé L'index est réduit Cependant, certaines applications gourmandes en E/S peuvent utiliser directement une mémoire suffisamment grande pour lire toutes les données dans la mémoire pour le fonctionnement. Dans ce cas, l'index clusterisé n'a aucun avantage.
  • Les clés primaires aléatoires provoqueront des problèmes de fractionnement de page. Si les clés primaires sont insérées séquentiellement, l'efficacité sera relativement plus élevée, car dans B+Tree, il vous suffit de le faire. continuez à ajouter à l'arrière Oui ; mais si la clé primaire est insérée de manière non séquentielle, l'efficacité sera beaucoup plus faible car le fractionnement des pages peut être impliqué. En prenant l'image ci-dessus comme exemple, en supposant que chaque nœud peut enregistrer trois éléments de données et que nous voulons maintenant insérer un enregistrement avec une clé primaire de 4,5, nous devons alors reculer la valeur de la clé primaire de 5, ce qui fera également reculer le nœud avec une clé primaire de 8. Le fractionnement des pages entraîne une insertion de données moins efficace et occupe plus d'espace de stockage.
  • Lors de l'interrogation d'un index non clusterisé (index secondaire), vous devez renvoyer la table. Étant donné qu'un index est une arborescence d'index et que les données se trouvent toutes sur l'index clusterisé, donc si vous utilisez un index non clusterisé pour effectuer une recherche, les feuilles de l'index non clusterisé stockent la valeur de la clé primaire. Recherchez d'abord la valeur de la clé primaire. , puis maintenez La valeur de la clé primaire est ensuite recherchée sur l'index clusterisé, de sorte qu'un total de deux arborescences d'index soient interrogées, ce qui correspond au retour de la table.

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer