前面我們說過了b-tree的結構,事實上我們所建立的索引的結構都是b-tree結構,聚簇索引也不例外。
概念:聚簇索引:不是一種單獨的索引型別,而是一種資料儲存方式。innodb的聚簇索引實際是在同一結構中儲存了b-tree和資料行。葉子頁包含了行的全部資料,而節點頁只包含了索引列。innodb通過主鍵聚集資料,如果沒有定義主鍵,innodb將選擇乙個沒有空值的列建立聚簇索引。(innodb引擎上,資料表都會有乙個聚簇索引?)二級索引的b-tree的葉子頁上保留了二級索引的列值以及聚簇索引的列值。如果查詢二級索引列值之外的值,需要對根據聚簇索引查詢到其它列值。(二級索引訪問需要兩次索引查詢)。
覆蓋索引:索引包含所有要查詢的字段的值,則稱為覆蓋索引。由於innodb中的二級索引在葉子節點中儲存了行的主鍵值,如果二級主鍵能夠覆蓋查詢,則可避免對主鍵的二次查詢。
在innodb的儲存引擎上,主索引是與資料記錄 儲存在一起的(聚簇在一起),在myisam儲存引擎中是沒有聚簇索引這個概念的
上圖可見,聚簇索引與普通索引不同的地方為:
普通索引是關鍵字對應值的位置,關鍵字與值是分離開來的
而聚簇索引是關鍵字和值在一起,之所以叫做聚簇索引是因為記錄本人和innodb主索引在一起。而不是對應的關係了。
乙個不錯的聚簇索引示例
中文版.
聚簇索引和非聚簇索引
一 聚簇索引 clustered indexes 的使用 聚簇索引是一種對磁碟上實際資料重新組織以按指定的乙個或多個列的值排序。由於聚簇索引的索引頁面指標指向資料頁面,所以使用聚簇索引查詢資料幾 乎總是比使用非聚簇索引快。每張表只能建乙個聚簇索引,並且建聚簇索引需要至少相當該錶120 的附加空間,以...
聚簇索引和非聚簇索引
一 聚簇索引 clustered indexes 的使用 聚簇索引是一種對磁碟上實際資料重新組織以按指定的乙個或多個列的值排序。由於聚簇索引的索引頁面指標指向資料頁面,所以使用聚簇索引查詢資料幾乎總是比使用非聚簇索引快。每張表只能建乙個聚簇索引,並且建聚簇索引需要至少相當該錶120 的附加空間,以存...
聚簇索引和非聚簇索引
一 聚簇索引 clustered indexes 的使用 聚簇索引是一種對磁碟上實際資料重新組織以按指定的乙個或多個列的值排序。由於聚簇索引的索引頁面指標指向資料頁面,所以使用聚簇索引查詢資料幾 乎總是比使用非聚簇索引快。每張表只能建乙個聚簇索引,並且建聚簇索引需要至少相當該錶120 的附加空間,以...