一、mysql索引結構
B+樹:
B樹是?個平衡的多叉樹,一個節點可以有多個數據內容,這樣就不會出現二叉樹那樣數據龐大的時候,樹的高度比較高的情況,查詢的次數就會少,B+樹葉子節點間有指針相互鏈接,并且會維護了索引的順序的,所以有順序、有相鄰的引用,這樣在執行范圍查找的時候,就可以左右移動,范圍查找的效率就會高很多。所以數據龐大的時候,B+樹被?泛使用,數據庫、?件系統等場景。
哈希索引:
哈希索引就是采??定的哈希算法,把鍵值換算成新的哈希值,檢索時不需要類似B+樹那樣從根節點到葉?節點逐級查找,只需?次哈希算法即可?刻定位到相應的位置,速度?常快。
如果是等值查詢,那么哈希索引明顯有絕對優勢,因為只需要經過?次算法即可找到相應的鍵值;
前提是鍵值都是唯?的。如果鍵值不是唯?的,就需要先找到該鍵所在位置,然后再根據鏈表往后掃描,直 到找到相應的數據;
如果是范圍查詢檢索,這時候哈希索引就毫??武之地了,因為原先是有序的鍵值,經過哈希算法后,有可能變成不連續的了,就沒辦法再利?索引完成范圍查詢檢索;
哈希索引也沒辦法利?索引完成排序,以及like ‘xxx%’ 這樣的部分模糊查詢(這種部分模糊查詢,其實本質上也是范圍查詢);
在有?量重復鍵值情況下,哈希索引的效率也是極低的,因為存在哈希碰撞問題。
紅黑樹:
紅黑樹也可以查詢很快,都是紅黑樹在數據很多的情況下,樹的高度是很高的,所以也不用來做索引了。
普通二叉樹這就更加不行了,高度不說了,它還不會平衡。
如果123456這樣按照順序添加,1永遠是跟節點,依次增加就之后在樹的右邊加。
延伸閱讀:
二、索引及其優缺點
索引本質:索引是數據結構。這些數據結構以某種方式指向數據,這樣可以在這些數據結構的基礎上實現高效查找算法。
索引是在存儲引擎實現的,因此每種存儲引擎的索引不一定完全相同,并且每種存儲引擎不一定支持所有類型的索引。同時存儲引擎可以定義每個表的最大索引數和最大索引長度。所有存儲引擎支持每個表至少16個索引,總索引長度至少為256字節。
優點:
1、提高數據檢索的效率,降低數據庫的I/O成本
2、通過創建少數索引,可以保證數據庫表中每一行數據的少數性
3、可以加速表和表之間的連接。對于有依賴關系的子表和父表聯合查詢時,可以提高查詢速度
4、在使用分組和排序子句進行數據查詢時,可以顯著減少查詢中分組和排序的時間,降低CPU的消耗
缺點:
1、創建索引和維護索引要耗費時間
2、索引需要占磁盤空間,存儲在磁盤上
3、雖然索引大大提高了查詢 速度,同時也會降低更新表的速度