Résumé de la base de données (1) - Technologie d'index dans l'index de hachage de base de données

Lien d'origine

table des matières

Technologie d'indexation dans l'index de hachage de base de données


Technologie d'indexation dans l'index de hachage de base de données

1. Index de hachage

L'index de hachage est implémenté sur la base d'une table de hachage et seules les requêtes qui correspondent exactement à toutes les colonnes de l'index sont valides. Pour chaque ligne de données, le moteur de stockage calcule un code de hachage pour toutes les colonnes d'index. Le code de hachage est une valeur plus petite et les codes de hachage calculés pour les lignes avec des valeurs de clé différentes sont différents. L'index de hachage stocke tous les codes de hachage dans l'index et stocke en même temps un pointeur vers chaque ligne de données de la table de hachage.

Pour le même hachage, une liste chaînée est utilisée pour résoudre les conflits. Similaire à hashmap. La structure de l'index étant très compacte, la requête de l'index de hachage est très rapide.

Par exemple:
Écrivez la description de l'image ici

Limitations de l'indice de hachage:

  • L'index de hachage contient uniquement la valeur de hachage et le pointeur de ligne et ne stocke pas la valeur de champ, de sorte que la valeur de l'index ne peut pas être utilisée pour éviter de lire la ligne.
  • Les données d'index de hachage ne sont pas stockées dans l'ordre des valeurs d'index, elles ne peuvent donc pas être utilisées pour le tri.
  • L'index de hachage ne prend pas non plus en charge la recherche de correspondance de colonne d'index partielle, car l'index de hachage utilise toujours tout le contenu de la colonne d'index pour calculer la valeur de hachage.
  • L'index de hachage ne prend en charge que les requêtes de comparaison équivalentes, y compris =, IN (), <> (notez que <> et <=> sont des opérations différentes). Ne prend en charge aucune requête de plage, telle que WHERE price> 100.
  • L'accès aux données d'index de hachage est très rapide, sauf s'il existe de nombreuses collisions de hachage (différentes valeurs de colonne d'index ont la même valeur de hachage). Lorsqu'un conflit de hachage se produit, le moteur de stockage doit parcourir tous les pointeurs de ligne de la liste liée et comparer ligne par ligne jusqu'à ce qu'il trouve toutes les lignes qui remplissent les conditions.
  • S'il existe de nombreux conflits de hachage, certaines opérations de maintenance d'index seront coûteuses. Par exemple, si un index de hachage est établi sur une colonne avec une très faible sélectivité (beaucoup de conflits de hachage), alors lorsqu'une ligne est supprimée de la table, le moteur de stockage doit parcourir chaque ligne de la liste chaînée du hachage correspondant valeur, et recherchez et supprimez la référence de la ligne correspondante, plus il y a de conflits, plus le coût est élevé.

2. Hachage adaptatif

Dans Mysql, le moteur InnoDB a une fonction spéciale appelée index de hachage adaptatif, qui créera un index de hachage en mémoire basé sur l'index B-Tree, ce qui donne à l'index B-Tree certains des avantages de l'index de hachage.

Créez un index de hachage personnalisé:

Si le moteur de stockage ne prend pas en charge les index de hachage, vous pouvez simuler la création d'index de hachage comme InnoDB, qui peuvent profiter de la commodité des index de hachage. Par exemple, seul un petit index est nécessaire pour créer un index pour une clé longue.
Idée : créer un pseudo-index de hachage sur la base de B-Tree. Ce n'est pas la même chose qu'un véritable index de hachage, car B-Tree est toujours utilisé pour la recherche, mais il utilise des valeurs de hachage au lieu de la clé elle-même pour la recherche d'index. Il vous suffit de spécifier manuellement la fonction de hachage dans la clause WHERE de la requête.
Écrivez la description de l'image ici
Écrivez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/lsx2017/article/details/113961937
conseillé
Classement