Heim  >  Artikel  >  Datenbank  >  Der Unterschied zwischen Btree- und Hash-Indizes in MySQL

Der Unterschied zwischen Btree- und Hash-Indizes in MySQL

小云云
小云云Original
2017-11-17 13:28:431670Durchsuche

Wir wissen, dass MySQL zwei Indizes hat: Btree und Hash. Kennen Sie den Unterschied zwischen ihnen? In diesem Artikel wird kurz der Unterschied zwischen den beiden Indextypen in MySQL, Btree und Hash, beschrieben. Aufgrund der Besonderheit der Hash-Indexstruktur ist ihre Abrufeffizienz sehr hoch. Der Indexabruf kann im Gegensatz zum B-Tree-Index, der mehrere E/A-Zugriffe vom Wurzelknoten zum Zweigknoten erfordert, sehr hoch sein Seitenknoten, Hash Die Abfrageeffizienz des Index ist viel höher als die des B-Tree-Index.

Viele Leute haben möglicherweise wieder Fragen. Warum verwendet nicht jeder den Hash-Index, sondern auch den B-Tree-Index?

Alles hat zwei Seiten und der Hash-Index ist derselbe. Obwohl der Hash-Index sehr effizient ist, bringt der Hash-Index selbst aufgrund seiner Besonderheiten auch viele Einschränkungen und Nachteile mit sich, hauptsächlich wie folgt.

(1) Der Hash-Index kann nur „="-, „IN"- und „<=>"-Abfragen erfüllen und Bereichsabfragen können nicht verwendet werden.

Da der Hash-Index den Hash-Wert nach der Hash-Operation vergleicht, kann er nur für die Gleichwertfilterung und nicht für die bereichsbasierte Filterung verwendet werden, da der Hash-Wert nach der Verarbeitung durch den entsprechenden Hash-Algorithmus groß ist Es ist nicht garantiert, dass die Beziehung genau dieselbe ist wie vor der Hash-Operation.

(2) Der Hash-Index kann nicht verwendet werden, um Datensortierungsvorgänge zu vermeiden.

Da der Hash-Index den Hash-Wert nach der Hash-Berechnung speichert und die Größenbeziehung des Hash-Werts nicht unbedingt genau mit dem Schlüsselwert vor der Hash-Operation übereinstimmt, kann die Datenbank die Indexdaten nicht dazu verwenden Vermeiden Sie Sortiervorgänge.

(3) Der Hash-Index kann nicht mit Teilindexschlüsseln abgefragt werden.

Für den kombinierten Index werden bei der Berechnung des Hash-Werts des Hash-Index die kombinierten Indexschlüssel zusammengeführt und dann der Hash-Wert zusammen berechnet, anstatt den Hash-Wert separat zu berechnen, sodass er durch berechnet wird Der erste oder mehrere Indexschlüssel des kombinierten Indexes kann bei der Abfrage nicht verwendet werden.

(4) Der Hash-Index kann den Tabellenscan zu keinem Zeitpunkt vermeiden.

Wie wir bereits wissen, dient der Hash-Index dazu, den Hash-Wert des Hash-Operationsergebnisses und die entsprechenden Zeilenzeigerinformationen in einer Hash-Tabelle zu speichern, nachdem die Hash-Operation für den Indexschlüssel ausgeführt wurde Selbst wenn Sie die Anzahl der Datensätze erhalten, die einen bestimmten Hash-Schlüsselwert erfüllen, können Sie die Abfrage nicht direkt aus dem Hash-Index abschließen. Sie müssen dennoch entsprechende Vergleiche durchführen, indem Sie auf die tatsächlichen Daten in der Tabelle zugreifen und diese abrufen entsprechende Ergebnisse.

(5) Wenn ein Hash-Index auf eine große Anzahl gleicher Hash-Werte trifft, ist seine Leistung nicht unbedingt höher als die des B-Tree-Index.

Wenn Sie bei Indexschlüsseln mit geringer Selektivität einen Hash-Index erstellen, ist eine große Anzahl von Datensatzzeigerinformationen mit demselben Hash-Wert verknüpft. Auf diese Weise ist es sehr mühsam, einen bestimmten Datensatz zu finden, und es werden mehrere Zugriffe auf die Tabellendaten verschwendet, was zu einer geringen Gesamtleistung führt.

Oben haben wir die Unterschiede zwischen Btree- und Hash-Indizes aus fünf Aspekten vorgestellt. Ich glaube, dass jeder sie versteht, und ich hoffe, dass Sie sie in Ihrer Arbeit verwenden können.

Verwandte Empfehlungen:

Mysql-index-BTree-Typ [vereinfacht]

MySQL-Indexoptimierung btree hash rtree

Der Weg zur MySQL-Optimierung ----Hash-Index-Optimierung

Das obige ist der detaillierte Inhalt vonDer Unterschied zwischen Btree- und Hash-Indizes in MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn