1. Avant-propos :
Dans nos vies, nous exportons des applications qui peuvent voir l'effet d'index, comme les horaires de train consultés dans les gares, les annuaires de dictionnaires, etc. Leur fonction est celle des index. Ils filtrent les résultats finaux souhaités en réduisant continuellement la portée des données à obtenir, et en même temps transforment les événements aléatoires en événements séquentiels, c'est-à-dire que nous utilisons toujours la même méthode de recherche pour verrouiller. Données (recherche A-Z du dictionnaire).
Exemple de vie - prendre un train : je vais prendre un train pour rentrer dans ma ville natale S'il n'y a pas d'horaire de train quand je veux prendre le train, le pire résultat est que je dois me rendre à tous les trains. m'arrêter pour trouver le train que je veux prendre ; mais il y en a. Avec les horaires, je peux savoir rapidement où s'arrête le train que je veux prendre, et je peux m'y rendre directement au lieu d'y aller un par un pour voir si le train que je veux prendre est aller, accélérant ainsi ma visite. Cet horaire de train est l'index de la base de données.
2. Principe du disque :
Cette partie contient beaucoup de texte et de théorie, et c'est un casse-tête à lire. Vous pouvez la lire si vous l'avez. êtes intéressé. Peu importe si vous n'êtes pas intéressé. Lorsque vous lisez les chapitres suivants, rappelez-vous simplement une conclusion de cette partie :
Lisez les données autant que possible [réduisez le nombre d'interactions d'E/S. avec le système d'exploitation].
D'accord, si vous n'êtes pas intéressé, vous pouvez l'ignorer et passer à la partie suivante.
La mise en œuvre de la base de données est relativement complexe. Les données sont stockées sur le disque. Afin d'améliorer les performances, une partie des données peut être lue en mémoire pour être calculée à chaque fois, car on connaît le coût d'accès. le disque est environ 100 000 fois celui de l'accès à la mémoire, donc un simple arbre de recherche est difficile à répondre à des scénarios d'application complexes. L'accès au disque a été mentionné plus tôt, voici donc une brève introduction aux E/S du disque et à la pré-lecture. La lecture des données à partir du disque repose sur un mouvement mécanique. Le temps passé à chaque lecture de données peut être divisé en trois catégories : temps de recherche et délai de rotation. , et le temps de transmission. Partie,
a)·Temps de recherche : Le temps nécessaire au bras magnétique pour se déplacer vers la piste spécifiée est généralement inférieur à 5 ms. b) Délai de rotation : C'est la vitesse du disque que nous entendons souvent. environ, comme 7 200 tr/min pour un disque. Cela signifie qu'il peut tourner 7 200 fois par minute, ce qui signifie qu'il peut tourner 120 fois par seconde, et le délai de rotation est de 1/120/2 = 4,17 ms ; fait référence à la lecture du disque ou à l'écriture de données sur le disque. Le temps est généralement de quelques dixièmes de milliseconde, ce qui est négligeable par rapport aux deux premières fois.
(J'ai lu un article très détaillé : http://wdxtub.com/2016/04/16/thin-csapp-3/)
Ensuite, le temps qu'il faut pour accéder à un disque est un disque IO Le temps est approximativement égal à 5 4,17 = 9 ms, ce qui semble plutôt bien, mais il faut savoir qu'une machine à 500 MIPS (Million Instructions Per Second) peut exécuter 500 millions d'instructions par seconde, car les instructions dépendent de la nature de Autrement dit, 400 000 instructions peuvent être exécutées dans le temps nécessaire à l'exécution d'une IO. La base de données contient souvent des centaines de milliers, des millions voire des dizaines de millions de données. Chaque fois que cela prend 9 millisecondes, c'est évidemment un désastre. .
Donc, conclusion : réduisez le nombre d’interactions E/S du système d’exploitation.
(Nous appelons les données lues par IO à chaque fois une page. La taille spécifique des données sur une page dépend du système d'exploitation, généralement 4k ou 8k, c'est-à-dire que nous lisons les données dans une page. Quand les données sont générées, une seule IO se produit réellement)
3. Qu'est-ce qu'un index :
Lors de l'utilisation du système de base de données, la requête de données est l'opération de données la plus fréquemment utilisée.
L'algorithme de requête le plus basique est bien sûr la recherche linéaire. Il parcourt la table puis fait correspondre ligne par ligne si la valeur de la ligne est égale au mot-clé à trouver. Sa complexité temporelle est O(n). Cependant, les algorithmes avec une complexité temporelle de O(n) peuvent également atteindre de bonnes performances avec de petites tables et des bases de données peu chargées. Mais lorsque les données augmentent, l'algorithme avec une complexité temporelle de O(n) est évidemment mauvais et les performances chutent rapidement.
Heureusement, le développement de l'informatique a fourni de nombreux meilleurs algorithmes de recherche, tels que la recherche binaire et la recherche binaire. recherche arborescente), etc. Si vous faites une petite analyse, vous constaterez que chaque algorithme de recherche ne peut être appliqué qu'à des structures de données spécifiques. Par exemple, la recherche binaire nécessite que les données récupérées soient ordonnées, tandis que la recherche par arbre binaire ne peut être appliquée qu'aux arbres de recherche binaires, mais. les données elles-mêmes La structure organisationnelle ne peut pas satisfaire complètement diverses structures de données (par exemple, il est théoriquement impossible d'organiser les deux colonnes dans l'ordre en même temps), donc en plus des données, le système de base de données maintient également des structures de données qui satisfont une recherche spécifique Les structures font référence (pointent vers) les données d'une manière ou d'une autre, ce qui permet d'implémenter des algorithmes de recherche avancés sur ces structures de données. Cette structure de données est un index.
4. L'index B-Tree de MySQL (techniquement B Tree)
D'accord, voici le cœur de cet article !
Dans MySQL, il existe quatre principaux types d'index, à savoir : l'index B-Tree, l'index Hash, l'index Fulltext et l'index R-Tree. Nous analysons principalement les indices B-Tree. (B : équilibre signifie équilibre, pas arbre binaire)
1 Explication détaillée de la structure des données de l'arbre b
.L'image ci-dessus est un arbre b (sous le moteur innodb, la structure de B sous le moteur myisam est différente. Pour parler franchement, c'est la différence entre un index clusterisé et un index non clusterisé. Pour plus de détails, voir :
Mysql-Clustered Index
Le bloc bleu clair est appelé un bloc de disque. Vous pouvez voir que chaque bloc de disque contient plusieurs éléments de données (affichés en bleu foncé, plage : [(M/ 2). )-1, M-1] M représente le total des données) et des pointeurs (affichés en jaune). Par exemple, le bloc de disque 1 contient les éléments de données 17 et 35, y compris les pointeurs P1, P2 et P3 qui représentent les blocs de disque inférieurs à. 17 et P2 représente les blocs de disque entre 17 et 35, P3 représente les blocs de disque supérieurs à 35. Les données réelles existent dans les nœuds feuilles, à savoir 3, 5, 9, 10, 13, 15, 28, 29, 36, 60, 75. , 79. , 90, 99. Les nœuds non-feuilles ne stockent pas de données réelles (Caractéristiques de B), seuls les éléments de données qui guident la direction de recherche, comme 17 et 35, n'existent pas vraiment dans la table de données >
.Processus de recherche arborescente 2.B
Si c'est la structure de gauche, le nombre d'E/S est trois fois ; si c'est la table linéaire de droite, le nombre d'E/S ; Les E/S sont 6 fois. Il est évident que les IO changent. Il y a plus
mappage de deux conclusions :
2). Lorsque les éléments de données de l'arbre b sont des structures de données composites (index multi-colonnes), telles que (nom, âge, sexe), les nombres b sont utilisés pour construire l'arbre de recherche dans l'ordre de gauche. à droite.
cartographie deux conclusions :