mysql索引

mysl索引分類
  • B+樹索引、Hash索引、全文索引是mysql數據庫中的三類索引,今天着重學習最常用到的innodb存儲引擎中的b+樹索引。

基礎知識,首先你需要了解二叉查找樹,平衡二叉樹和B樹這三種數據結構。

  • 二叉查找樹
    特點:任何節點的左子節點的鍵值都小於當前節點,右子節點的鍵值都大於當前節點。

  • 平衡二叉樹
    在二叉查找樹的基礎上保持樹的平衡,特點每個節點的左右子樹的高度差不能超過1,當我們插入或者刪除數據後,它可以通過左旋右旋來保持樹的平衡。

  • B樹
    前提:我們從磁盤讀取數據都是按照磁盤塊來讀取的,不是一條一條的讀,而平衡二叉樹每個節點都只存儲一個鍵值和數據,如果我們有大量的數據,平衡二叉樹的節點會很多,高度就會很高,每個節點的讀取都是一次磁盤IO,效率極低。
    B樹即(Balance Tree)平衡樹的意思,B樹的每個節點可以更多的鍵值和數據,並且每個節點可以擁有多個子節點。(子節點的個數成爲階)這樣樹高會很低,查找數據磁盤IO次數會很少,效率很高。

B+樹

  • 概念:沒有子節點的節點叫做葉子節點,其他的叫做非葉子節點。
  • 特點1:B+樹的非葉子節點上是不存儲數據的,僅存儲鍵值,而B樹節點中不僅存儲鍵值,也會存儲數據。
  • 特點2: 頁是數據庫讀取數據的基本單位,innodb中頁的大小是固定的默認爲16KB,如果非葉子節點不存儲數據,就會存儲更多的鍵值,相應的樹的階數(節點的子節點個數)就會更大,樹就會更矮胖,這樣查找數據的磁盤IO次數會更少。一般根節點是常駐內存的。
  • 特點3: B+樹索引的所有數據都存儲在葉子節點,而數據是按順序排列的,所以使得範圍查找、排序查找、分組以及去重變的異常簡單。而B樹因爲數據分散在各個節點,要實現這一點很難。
聚簇索引/非聚簇索引
  • 聚簇索引:以主鍵作爲B+樹索引的鍵值而構建的B+樹索引,我們稱之爲聚簇索引。
  • 非聚簇索引:以主鍵以外的列值作爲B+樹索引的鍵值而構建的B+樹索引,我們稱之爲非聚簇索引。
    區別:聚簇索引中葉子節點存儲了表中的所有數據,非聚簇索引中葉子節點不存儲表數據,而是存儲該列對應的主鍵值,要查找數據還需要根據主鍵再去聚簇索引中進行查找,這個過程稱爲回表。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章