<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
索引是一種特殊的資料庫結構,被設計用來快速查詢資料庫表中的特定記錄。索引有多種型別,就像字典有拼音查詢和偏旁查詢一樣都是為了提高檢索效率。MySQL中最常見的索引型別有
B+樹索引
和雜湊索引
,下面來簡單介紹一下這兩種索引型別有哪些差別和優劣。
B+樹索引是一種多路徑的平衡搜尋樹,具有如下特點:
1.非葉子節點不儲存資料,只儲存索引值
2.葉子節點儲存所有的索引值和資料
3.同級節點通過指標自小而大順序連結
4.節點內的資料也是自小而大順序存放
5.葉子節點擁有父節點的所有資訊
結構如下圖:
由於資料順序存放,所以無論是區間還是順序掃描都更快。
非葉子節點不儲存資料,因此幾乎都能放在記憶體中,搜尋效率更高
單節點中可儲存的資料更多,平均掃描I/O請求樹更少
平均查詢效率穩定(每次查詢都從根結點到葉子結點,查詢路徑長度相同)
新增資料不是按順序遞增時,索引樹需要重新排列,容易造成碎片和頁分裂情況。
雜湊索引採用一定的雜湊演演算法,把鍵值換算成新的雜湊值,檢索時不需要類似B+樹那樣從根節點到葉子節點逐級查詢,只需一次雜湊演演算法即可立刻定位到相應的位置,速度非常快,具有如下特點:
1.雜湊索引建立在雜湊表的基礎上
2.對於每個值,需要先計算出對應的雜湊碼(Hash Code),不同值的雜湊碼唯一
3.把雜湊碼儲存在雜湊表中,同時雜湊表也儲存指向對應每行記錄的指標
結構如下圖:
大量唯一等值查詢時,雜湊索引效率通常更高。
雜湊索引對於範圍查詢和模糊匹配查詢顯得無能為力。
雜湊索引不支援排序操作,對於多列聯合索引的最左匹配規則也不支援。
雜湊索引不支援字首索引,因為雜湊索引始終是使用索引列的全部內容來計算雜湊值。
如果存在雜湊衝突的情況,也就是不同的索引列有著相同的雜湊值,這時候需要遍歷連結串列中所有的行指標進行逐行比對,直到找到所有滿足條件的行,效率較低。
備註:先說下,在MySQL檔案裡,實際上是把B+樹索引寫成了BTREE,例如像下面這樣的寫法:
CREATE TABLE t( aid int unsigned not null auto_increment, userid int unsigned not null default 0, username varchar(20) not null default ‘', detail varchar(255) not null default ‘', primary key(aid), unique key(uid) USING BTREE, key (username(12)) USING BTREE — 此處 uname 列只建立了最左12個字元長度的部分索引 )engine=InnoDB;
B+樹是一個平衡的多叉樹,從根節點到每個葉子節點的高度差值不超過1,而且同層級的節點間有指標相互連結。
在B+樹上的常規檢索,從根節點到葉子節點的搜尋效率基本相當,不會出現大幅波動,而且基於索引的順序掃描時,也可以利用雙向指標快速左右移動,效率非常高。
因此,B+樹索引被廣泛應用於資料庫、檔案系統等場景。順便說一下,xfs檔案系統比ext3/ext4效率高很多的原因之一就是,它的檔案及目錄索引結構全部採用B+樹索引,而ext3/ext4的檔案目錄結構則採用Linked list, hashed B-tree、Extents/Bitmap等索引資料結構,因此在高I/O壓力下,其IOPS能力不如xfs。
簡單地說,雜湊索引就是採用一定的雜湊演演算法,把鍵值換算成新的雜湊值,檢索時不需要類似B+樹那樣從根節點到葉子節點逐級查詢,只需一次雜湊演演算法即可立刻定位到相應的位置,速度非常快。
從上面的圖來看,B+樹索引和雜湊索引的明顯區別是:
如果是等值查詢,那麼雜湊索引明顯有絕對優勢,因為只需要經過一次演演算法即可找到相應的鍵值;當然了,這個前提是,鍵值都是唯一的。如果鍵值不是唯一的,就需要先找到該鍵所在位置,然後再根據連結串列往後掃描,直到找到相應的資料;
從示意圖中也能看到,如果是範圍查詢檢索,這時候雜湊索引就毫無用武之地了,因為原先是有序的鍵值,經過雜湊演演算法後,有可能變成不連續的了,就沒辦法再利用索引完成範圍查詢檢索;
同理,雜湊索引也沒辦法利用索引完成排序,以及like ‘xxx%’ 這樣的部分模糊查詢(這種部分模糊查詢,其實本質上也是範圍查詢);
雜湊索引也不支援多列聯合索引的最左匹配規則;
B+樹索引的關鍵字檢索效率比較平均,不像B樹那樣波動幅度大,在有大量重複鍵值情況下,雜湊索引的效率也是極低的,因為存在所謂的雜湊碰撞問題。
到此這篇關於MySQL B+樹索引與雜湊索引的文章就介紹到這了,更多相關MySQL B+樹索引與雜湊索引內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45