Mysql爲什麼添加索引可以提高查詢速度,看完這篇就夠了

文章來自:https://mbd.baidu.com/newspage/data/landingshare?pageType=1&isBdboxFrom=1&context=%7B%22nid%22%3A%22news_9471377609032075720%22%2C%22sourceFrom%22%3A%22bjh%22%7D

索引做了些什麼可以讓我們查詢加快速度呢?

其實就是將無序的數據變成有序(相對)

 

 

 

要找到id爲8的記錄簡要步驟:

 

 

 

很明顯的是:沒有用索引我們是需要遍歷雙向鏈表來定位對應的頁,現在通過**“目錄”**就可以很快地定位到對應的頁上了!

其實底層結構就是B+樹,B+樹作爲樹的一種實現,能夠讓我們很快地查找出對應的記錄。

參考資料:

1.3索引降低增刪改的速度

B+樹是平衡樹的一種。

平衡樹:它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。

如果一棵普通的樹在極端的情況下,是能退化成鏈表的(樹的優點就不復存在了)

 

 

 

B+樹是平衡樹的一種,是不會退化成鏈表的,樹的高度都是相對比較低的(基本符合矮矮胖胖(均衡)的結構)【這樣一來我們檢索的時間複雜度就是O(logn)】!從上一節的圖我們也可以看見,建立索引實際上就是建立一顆B+樹。

  • B+樹是一顆平衡樹,如果我們對這顆樹增刪改的話,那肯定會破壞它的原有結構
  • 要維持平衡樹,就必須做額外的工作。正因爲這些額外的工作開銷,導致索引會降低增刪改的速度

哈希索引

除了B+樹之外,還有一種常見的是哈希索引。

哈希索引就是採用一定的哈希算法,把鍵值換算成新的哈希值,檢索時不需要類似B+樹那樣從根節點到葉子節點逐級查找,只需一次哈希算法即可立刻定位到相應的位置,速度非常快

  • 本質上就是把鍵值換算成新的哈希值,根據這個哈希值來定位

 

 

  • 哈希索引也沒辦法利用索引完成排序
  • 不支持最左匹配原則
  • 在有大量重複鍵值情況下,哈希索引的效率也是極低的---->哈希碰撞問題。
  • 不支持範圍查詢
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章