在前面的文章中我們可以簡單推導出索引的形成過程,具體内容詳情可以參考
演示表的基本結構如下所示
mysql> CREATE TABLE index_test(
-> c1 INT,
-> c2 INT,
-> c3 CHAR(1),
-> PRIMARY KEY(c1)
-> ) ROW_FORMAT = Compact;
Query OK, 0 rows affected (0.01 sec)
根據演示表得出主鍵索引的簡單結構如下所示
整個主鍵索引或者說B 樹由數據頁構成,當然數據頁中采用記錄頭屬性record_type區分了是業務記錄還是目錄項記錄,0為業務記錄,1為目錄項記錄。了解完這些我們就可以來聊聊索引的類型。
聚簇索引聚簇索引的特性一般是兩個
我們将具有這種特性的B 樹稱為聚簇索引,這種索引不需要人為指定創建,InnoDB存儲引擎會自動創建,而且在InnoDB存儲引擎中,聚簇索引就是數據的存儲方式,因為所有的數據都存儲在B 樹的葉子節點中,聚簇索引最明顯的例子就是上圖,完全符合。
二級索引二級索引也可以被稱為普通索引,很明顯就是給非主鍵值加索引,例如給演示表index_test的非主鍵列c2加索引,那麼索引結構應該如下所示
二級索引和聚簇索引有很大的區别,主要有如下三點
查詢過程也會所有調整,例如需要查詢c2列為7的值,步驟如下
也就是說如果想通過二級索引查詢完整用戶記錄,需要查詢兩個B 樹,需要回表操作,為什麼這樣設計呢?顯然是節省内存空間。
聯合索引聯合索引顧名思義就是同時以多列的大小進行排序,其本質也是一個二級索引,如給index_test表的c2,c3列同時建立索引,先按照c2列值排序,如果c2列值相同再按照c3列排序,所以在用戶記錄數據頁中将存在三個值分别為c2列值,c3列值和主鍵c1列值,結構圖如下
請注意這裡因為組合索引包含了c2、c3列值,而記錄中也會包含主鍵值,這裡查詢将不再需要回表的操作,但這并不能證明組合索引不需要回表操作。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!