聚簇索引是對磁碟上實際資料重新組織以按指定的乙個或多個列的值排序的演算法。特點是儲存資料的順序和索引順序一致。一般情況下主鍵會預設建立聚簇索引,且一張表只允許存在乙個聚簇索引。
在《資料庫原理》一書中是這麼解釋聚簇索引和非聚簇索引的區別的:聚簇索引的葉子節點就是資料節點,而非聚簇索引的葉子節點仍然是索引節點,只不過有指向對應資料塊的指標。
因此,mysql中不同的資料儲存引擎對聚簇索引的支援不同就很好解釋了。下面,我們可以看一下mysql中myisam和innodb兩種引擎的索引結構
myisam的索引儲存圖如下,可以看出,無論是id還是cat_id,下面都儲存有執行實體地址的值。通過主鍵索引或者次索引來查詢資料的時候,都是先查找到物理位置,然後再到物理位置上去尋找資料。
myisam中, 主索引和次索引,都指向物理行(磁碟位置).
注意: innodb來說,
1: 主鍵索引 既儲存索引值,又在葉子中儲存行的資料
2: 如果沒有主鍵, 則會unique key做主鍵
3: 如果沒有unique,則系統生成乙個內部的rowid做主鍵.
4: 像innodb中,主鍵的索引結構中,既儲存了主鍵值,又儲存了行資料,這種結構稱為」聚簇索引」
MySQL 聚簇索引 和 非聚簇索引
索引節點的葉子頁面就好比一片葉子。葉子頭便是索引鍵值。先建立一張表 create table user id intnot null name varchar notnull class varchar notnull 對於myisam引擎,如果建立 id 和 name 為索引。對於下面查詢 sel...
MySQL聚簇索引和非聚簇索引
聚簇索引是指葉子節點儲存的是一整行記錄,比如innodb的主鍵索引,主鍵和表資料儲存在一起。聚簇索引並不是一種單獨的索引型別,而是一種資料儲存方式,因為一行資料不能同時儲存在兩個地方,所以一張表中只能有乙個聚簇索引,因為一張表的資料儲存順序只能是一種,故只有innodb主鍵索引是聚簇索引。聚簇索引的...
聚簇索引和非聚簇索引
一 聚簇索引 clustered indexes 的使用 聚簇索引是一種對磁碟上實際資料重新組織以按指定的乙個或多個列的值排序。由於聚簇索引的索引頁面指標指向資料頁面,所以使用聚簇索引查詢資料幾 乎總是比使用非聚簇索引快。每張表只能建乙個聚簇索引,並且建聚簇索引需要至少相當該錶120 的附加空間,以...