結構圖:其設計者規定了最下邊的那層,也就是存放記錄的那層為第
0
層,之後依次往上加。
現在以查詢主鍵為20
的記錄為例,採用二分法進行資料查詢
擴充套件,為什麼不用b
樹,而採用b+
樹呢?
b+
樹的葉子節點儲存的是完整的使用者記錄。
大家有木有發現,上邊介紹的聚簇索引
只能在搜尋條件是主鍵值時才能發揮作用,因為b+
樹中的資料都是按照主鍵進行行排序的。那如果我們想以別的列列作為搜尋條件該咋辦呢?難道只能從頭到尾沿著鍊錶依次遍歷記錄麼?此時便有了二級索引
。
b+
樹的葉子節點儲存的並不不是完整的使用者記錄,而只是c2
列 +主鍵
這兩個列列的值。
目錄項記錄中不不再是主鍵
+頁號
的搭配,而變成了了c2
列+頁號
的搭配。
以查詢c2
列的值為4
的記錄為例,查詢過程如下:
通過目錄項記錄
頁確定使用者記錄
真實所在的頁。
在真實儲存使用者記錄的頁中定位到具體的記錄。
但是這個b+
樹的葉子節點中的記錄只儲存了c2
和c1
(也就是主鍵)兩個列,所以我們必須再根據主鍵值去聚簇索引中再查詢一遍完整的使用者記錄。
上面的操作其實就是乙個回表
,整個完成的查詢需要用到2棵b+
樹。那為什麼需要回表
操作呢?直接把完整的使用者記錄放到葉子節點 不不就好了了麼?
示意圖如下:如圖所示,我們需要注意一下幾點:
千萬要注意一點,以c2
和c3
列的大小為排序規則建立的b+
樹稱為聯合索引
,它的意思與分別為c2
和c3
列分別建立索引的表述是不不同的,不不同點如下:
總結:2.沒有索引的情況下,不不論是以主鍵還是其他列列作為搜尋條件,只能沿著頁的雙鏈表從左到右依次遍歷各個頁。
3.innodb
儲存引擎的索引是一棵b+
樹,完整的使用者記錄都儲存在b+
樹第0
層的葉子節點,其他層次的節點都屬於內節點 ,內節點里儲存的是目錄項記錄 。 innodb 的索引分為兩大種:
二級索引
4.myisam
儲存引擎的資料和索引分開儲存,這種儲存引擎的索引全部都是 ⼆二級索引 ,在葉子節點處儲存的是列
+頁號
。
mysql 索引簡介
索引 是一種特殊的資料結構,可以用來快速查詢資料庫表中的特定記錄.是提高資料庫效能的重要方式.包括普通索引,唯一性索引,全文索引,單列索引,多列索引和空間索引.簡介 由資料庫表中的一列或多列組合而成,起作用是提高對錶中資料的查詢速度.設計原則 1.選擇唯一性索引 唯一性索引的值是唯一的,可以快速通過...
mysql索引簡介
參考資料 索引釋義 索引的分類 索引建立和刪除 索引的情景化應用 索引 index 是幫助mysql高效獲取資料的資料結構。提取句子主幹,就可以得到索引的本質 索引是資料結構。為什麼是索引,而不是直接的資料庫資料本身?查詢演算法只能應用於特定的資料結構,例如二分查詢適用於有序的資料,二叉樹查詢只能應...
mysql 索引簡介
索引 其實資料庫中的資料是按頁存放的 其實索引也是按頁存放的 所以本質上索引也佔硬碟空間 以最小的消耗,換取最大的利益 索引是一種有效組合資料的方式!為快速查詢到指定記錄做鋪墊 目的就是快速或者某個記錄!提高了資料庫的檢索速度!作用 大大提高資料庫的檢索速度 改善資料庫效能 mysql索引儲存型別分...