在 mysql 中,索引是在儲存引擎層實現的,儲存引擎沒有統一的索引標準,所以在不同儲存引擎中索引的工作方式並不一樣。即使多個儲存引擎支援同一種型別的索引,其底層的實現也可能不同。而在mysql 資料庫中,innodb 儲存引擎的使用最為廣泛,所以我們來了解一下innodb 的索引模型。
innodb 使用了b+樹索引模型,資料都是儲存在 b+ 樹中的。每乙個索引在 innodb中是對應一棵b+樹。例如我們建乙個表,並插入一些資料。建表語句如下:
create
table t(
id int
primary
key,
k int
notnull
, name varchar(16
),index
(k))
engine
=innodb
;
我們從建表語句中得知,表中有兩個索引:id(主鍵索引)、k(非主鍵索引)。
假設表中第一行到第五行的資料(r1~r5)中id的值為100、200、300、500、600;k的值分別為1、2、3、5、6。這兩個索引對應的b+樹示例圖如下:
其中:
innodb的索引機制
1 innodb將資料和索引儲存在一起 2 innodb索引是基於b tree的clustered index,b tree中的每個結點儲存key row data innodb中的第二個索引儲存,在搜尋時,先通過key找到pk,再通過pk搜尋b tree的結點,從中找到row data 3 由於聚...
InnoDB索引實現
1 innodb的資料檔案本身就是索引檔案。從上文知道,myisam索引檔案 是分離的,索引檔案僅儲存資料記錄的位址。而在innodb中,表資料 檔案本身就是按b tree組織的乙個索引結構,這棵樹的葉節點data域 儲存了完整的資料記錄,這個索引的key是資料表的主鍵,因此innodb 表資料檔案...
innodb索引概念
innodb索引概念 總結記錄下innodb的索引概念,以備檢視 innodb索引分類 聚簇索引 clustered index 1 有主鍵時,根據主鍵建立聚簇索引 2 沒有主鍵時,會用乙個唯一且不為空的索引列做為主鍵,成為此表的聚簇索引 3 如果以上兩個都不滿足那innodb自己建立乙個虛擬的聚集...