hash 值重复_MySQL调优实战:MySQL B+Tree索引和Hash索引的区别?
點擊上方“Java分享吧”,選擇“設(shè)為星標(biāo)”
優(yōu)選有價值的技術(shù)文獻(xiàn),從我做起
MySQL技術(shù)篇章
1、B+Tree索引
1、B+Tree首先是有序結(jié)構(gòu),為了不至于樹的高度太高,影響查找效率,在葉子節(jié)點上存儲的不是單個數(shù)據(jù),提高了查找效率;
為了更好的支持范圍查詢,B+樹在葉子節(jié)點冗余了非葉子節(jié)點數(shù)據(jù),為了支持翻頁,葉子節(jié)點之間通過指針相連;
2、B+樹算法:通過繼承了B樹的特征,通過非葉子節(jié)點查詢?nèi)~子節(jié)點獲取對應(yīng)的value,所有相鄰的葉子節(jié)點包含非葉子節(jié)點,使用鏈表進(jìn)行結(jié)合,有一定順序排序,從而范圍查詢效率非常高。
缺點:因為有冗余節(jié)點數(shù)據(jù),會比較占內(nèi)存。
2、Hash索引
’
1、Hash是k,v形式,通過一個散列函數(shù),能夠根據(jù)key快速找到value
2、哈希索引就是采用一定的hash算法,把鍵值換成新的哈希值,檢索時不需要類似B+樹那樣從根節(jié)點到葉子節(jié)點逐級查找,只需要一次hash算法即可立即定位到相應(yīng)的位置,速度非常快。
缺點:?因為底層數(shù)據(jù)結(jié)構(gòu)是散列的,無法進(jìn)行比較大小,不能進(jìn)行范圍查找
3、B+樹索引和hash索引的明顯區(qū)別:
1、如果是等值查詢,那么hash索引有明顯的優(yōu)勢,因為只需要經(jīng)過一次算法即可找到相應(yīng)的鍵值;當(dāng)然了,這個鍵值是唯一的,如果不唯一,則需要先找到下標(biāo)位置再鏈?zhǔn)讲檎摇?/p>
2、從示意圖可以知道,hash索引無法支持范圍查詢,因為原先是有序的鍵值,但是經(jīng)過hash算法后,有可能變成不連續(xù)的,就沒有辦法利用索引完成范圍查詢檢索數(shù)據(jù)。
3、同樣,hash索引也沒辦法利用索引完成排序,以及l(fā)ike `xxx%`這樣的模糊查詢(范圍查詢)。
4、hash索引也不支持多列聯(lián)合索引的最左前綴匹配規(guī)則。
5、B+樹索引的關(guān)鍵字檢索效率比較平均,不像B樹那樣波動幅度大,在有大量重復(fù)鍵的情況下,hash索引的效率也是極低的,因為存在hash碰撞問題。
歷史技術(shù)文獻(xiàn)
?Spring5.0源碼深度解析:SpringBean的Aop通知調(diào)用鏈源碼分析
Spring5.0源碼深度解析:SpringBean的生命周期,小白都能看懂
Spring5.0源碼深度解析:SpringBean循環(huán)依賴問題解決方案,小白都能看懂
Mybatis源碼分析執(zhí)行流程總結(jié),看這兒
Mybatis核心秘密,他到底用了多少設(shè)計模式
阿里小哥淺談Java集合,ArrayList源碼分析 what?
Java集合中LinkedList你弄懂沒?微軟面試有問道
CPU100%占用過高排查實戰(zhàn),看完你也會~
文章有幫助可以點個「在看」或「分享」,分享不易,請兄弟姐妹們點下吧!
我是吧主,Java干貨分享,記錄每一位程序員的點點滴滴故事,每篇文章原創(chuàng)與當(dāng)下程序員,架構(gòu)師,日??偨Y(jié)經(jīng)驗,全網(wǎng)唯一良心原創(chuàng)無廣告平臺~
總結(jié)
以上是生活随笔為你收集整理的hash 值重复_MySQL调优实战:MySQL B+Tree索引和Hash索引的区别?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 将特定像素点在图像上连接起来_图像分割【
- 下一篇: 大学生有必要学python吗_大学生学p