B-Arbre vs Table de Hachage
Dans MySQL, un type d'index est un b-arbre, et accéder à un élément dans un b-arbre est en échelle logarithmique amorti temps O(log(n))
.
D'autre part, l'accès à un élément dans une table de hachage est dans O(1)
.
Pourquoi une table de hachage pas utilisé au lieu d'un b-arbre afin d'accéder aux données à l'intérieur d'une base de données?
- Les tables de hachage ne prennent pas en charge les requêtes d'intervalle, et ne peut pas augmenter ou de réduire en douceur pendant le fonctionnement.
- Pourquoi ne pas hachage pour les colonnes qui n'ont pas besoin de la gamme des requêtes?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez uniquement accéder aux éléments par leur clé primaire dans une table de hachage.
C'est plus rapide qu'avec un algorithme d'arbre (
O(1)
au lieu delog(n)
), mais vous ne pouvez pas sélectionner des plages (tout entrex
ety
).Arbre algorithmes prennent en charge cette
Log(n)
alors que les index de hachage peut entraîner un full table scanO(n)
.Également les frais généraux constants de hash index est généralement plus gros (qui n'est pas facteur de thêta la notation, mais il existe encore).
Aussi arbre algorithmes sont généralement plus faciles à maintenir, développer avec les données, échelle, etc.
De hachage indices de travailler avec des pré-définis de hachage tailles, donc vous retrouver avec des "seaux", où les objets sont stockés dans. Ces objets sont en boucle sur nouveau pour vraiment trouver la bonne à l'intérieur de cette partition.
Donc, si vous avez de petites tailles que vous avez beaucoup de frais généraux pour les petits éléments, grandes tailles davantage à la numérisation.
D'aujourd'hui, les tables de hachage algorithmes généralement mis à l'échelle, mais de mise à l'échelle peut être inefficace.
Cependant il peut y avoir un point où votre index dépasse tolérable taille par rapport à votre hash tailles et de votre index doit être re-construit. Ce n'est généralement pas un problème, mais pour l'énorme-énorme-énorme bases de données, cela peut prendre des jours.
L'échange pour d'arbres algorithmes est de petite taille et ils sont adaptés pour presque tous les cas d'utilisation et sont donc par défaut.
Toutefois, si vous avez un très précises de cas d'utilisation, et vous savez exactement ce qui, et seulement ce qui est nécessaire, vous pouvez profiter de hachage index.
En fait, il semble que MySQL utilise à la fois le type d'index à une table de hachage ou d'un b-arbre suivant lien.
La différence entre l'utilisation d'un b-arbre et d'une table de hachage est que le premier vous permet d'utiliser colonne comparaisons dans les expressions qui utilisent le =, >, >=, <, <=, ou ENTRE opérateurs, tandis que le second est utilisé uniquement pour l'égalité des comparaisons qui utilisent le = ou <=> les opérateurs.
La complexité du temps de tables de hachage est constant que pour suffisamment de taille moyenne tables de hachage (il doit y avoir assez de seaux pour contenir les données). De la taille d'une table de base de données n'est pas connue à l'avance, de sorte que le tableau doit être rabâchage maintenant et puis pour obtenir des performances optimales d'une table de hachage. La redéfinition de est également coûteux.
Je pense que Hashmaps n'évoluent pas aussi bien, et peut être coûteux lors de l'ensemble de la carte doit être rabâchage.