自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

MySQL Hash索引和B-Tree索引的區(qū)別

數(shù)據(jù)庫(kù) MySQL
MySQL Hash索引相對(duì)于B-Tree索引,檢索效率要高上不少,下文對(duì)兩者的區(qū)別進(jìn)行了詳細(xì)的闡述,希望可以讓您對(duì)MySQL索引有更深的認(rèn)識(shí)。

MySQL Hash索引和B-Tree索引的區(qū)別究竟在哪里呢?相信很多人都有這樣的疑問,下文對(duì)兩者的區(qū)別進(jìn)行了詳細(xì)的分析,供您參考。

MySQL Hash索引結(jié)構(gòu)的特殊性,其檢索效率非常高,索引的檢索可以一次定位,不像B-Tree 索引需要從根節(jié)點(diǎn)到枝節(jié)點(diǎn),***才能訪問到頁節(jié)點(diǎn)這樣多次的IO訪問,所以 Hash 索引的查詢效率要遠(yuǎn)高于 B-Tree 索引。
可 能很多人又有疑問了,既然 Hash 索引的效率要比 B-Tree 高很多,為什么大家不都用 Hash 索引而還要使用 B-Tree 索引呢?任何事物都是有兩面性的,Hash 索引也一樣,雖然 Hash 索引效率高,但是 Hash 索引本身由于其特殊性也帶來了很多限制和弊端,主要有以下這些。

(1)MySQL Hash索引僅僅能滿足"=","IN"和"<=>"查詢,不能使用范圍查詢。

由于 MySQL Hash索引比較的是進(jìn)行 Hash 運(yùn)算之后的 Hash 值,所以它只能用于等值的過濾,不能用于基于范圍的過濾,因?yàn)榻?jīng)過相應(yīng)的 Hash 算法處理之后的 Hash 值的大小關(guān)系,并不能保證和Hash運(yùn)算前完全一樣。

(2)MySQL Hash索引無法被用來避免數(shù)據(jù)的排序操作。

由于 MySQL Hash索引中存放的是經(jīng)過 Hash 計(jì)算之后的 Hash 值,而且Hash值的大小關(guān)系并不一定和 Hash 運(yùn)算前的鍵值完全一樣,所以數(shù)據(jù)庫(kù)無法利用索引的數(shù)據(jù)來避免任何排序運(yùn)算;

(3)MySQL Hash索引不能利用部分索引鍵查詢。

對(duì)于組合索引,Hash 索引在計(jì)算 Hash 值的時(shí)候是組合索引鍵合并后再一起計(jì)算 Hash 值,而不是單獨(dú)計(jì)算 Hash 值,所以通過組合索引的前面一個(gè)或幾個(gè)索引鍵進(jìn)行查詢的時(shí)候,Hash 索引也無法被利用。

(4)MySQL Hash索引在任何時(shí)候都不能避免表掃描。

前面已經(jīng)知道,Hash 索引是將索引鍵通過 Hash 運(yùn)算之后,將 Hash運(yùn)算結(jié)果的 Hash 值和所對(duì)應(yīng)的行指針信息存放于一個(gè) Hash 表中,由于不同索引鍵存在相同 Hash 值,所以即使取滿足某個(gè) Hash 鍵值的數(shù)據(jù)的記錄條數(shù),也無法從 Hash 索引中直接完成查詢,還是要通過訪問表中的實(shí)際數(shù)據(jù)進(jìn)行相應(yīng)的比較,并得到相應(yīng)的結(jié)果。

(5)MySQL Hash索引遇到大量Hash值相等的情況后性能并不一定就會(huì)比B-Tree索引高。

對(duì)于選擇性比較低的索引鍵,如果創(chuàng)建 Hash 索引,那么將會(huì)存在大量記錄指針信息存于同一個(gè) Hash 值相關(guān)聯(lián)。這樣要定位某一條記錄時(shí)就會(huì)非常麻煩,會(huì)浪費(fèi)多次表數(shù)據(jù)的訪問,而造成整體性能低下。
 

 

 

【編輯推薦】

MySQL權(quán)限表的介紹

MySql索引要注意的8個(gè)事情

如何查看MySQL索引

mysql索引的不足

MySQL連接數(shù)據(jù)庫(kù)的命令

責(zé)任編輯:段燃 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2022-05-25 08:01:37

WHERESQL 語句

2024-02-27 07:35:55

B-TreeB+TreeMySQL

2023-01-26 00:59:39

B-Treegolang度量衡

2010-10-12 13:42:11

MySQL單列索引

2022-05-30 08:01:36

WHEREMySQL索引

2024-11-19 08:40:18

2010-11-11 15:48:54

MySQL單列索引

2010-05-31 13:38:17

2022-10-29 08:44:39

分布式數(shù)據(jù)庫(kù)存儲(chǔ)

2023-01-06 10:52:30

SQL索引存儲(chǔ)

2023-01-30 23:04:10

B-Treegolang優(yōu)化

2020-04-01 18:08:57

MySQL B-樹B+樹

2019-08-29 10:46:22

MySQL索引數(shù)據(jù)庫(kù)

2019-01-29 19:43:10

MySQL索引數(shù)據(jù)庫(kù)

2021-02-16 16:38:41

MySQLB+樹索引

2021-05-19 09:51:31

MySQL-B+樹數(shù)據(jù)

2011-04-22 14:45:45

SQL索引

2017-09-04 16:03:46

MySQLMySQL索引索引

2021-11-30 21:10:19

數(shù)據(jù)庫(kù)B樹索引

2020-09-28 15:34:38

ElasticSear索引MySQL
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)