聚簇索引首先並不是一種索引型別,而是一種資料儲存方式,我的理解是,是否為聚簇索引實際上指的就是b+樹的具體實現方式,也就是每個節點的data域裡面到底放什麼東西。究竟放的是具體的資料,還是指向資料的「指標」?
先給出乙個結論:innodb儲存引擎的主鍵使用的是聚簇索引,而非主鍵使用的稱作:「輔助索引」、「二次索引」,而mqisam儲存引擎無論主鍵,還是非主鍵使用的索引都是一樣的:「非聚簇索引」。
主鍵使用:聚簇索引
本質上是在b+樹索引的葉子節點上的data域裡儲存的就是對應行的全部資料。
innodb主鍵索引的使用的就是聚簇索引。因此,被索引的列必須是主鍵列,如果沒有主鍵,會選擇乙個唯一的非空索引代替,如果也沒有這樣的索引,那麼會隱式定義乙個主鍵來作為聚簇索引。因此,也可以說聚簇索引就是按照表的主鍵構造的乙個b+樹,同時葉子節點裡面儲存了表的行資料。
也正因為只有主鍵才能使用,因此,一張表只有乙個聚簇索引。
非主鍵使用:輔助索引、二次索引
其實書上還寫了乙個小括號,把二次索引也歸類為非聚簇索引,如果以data域是否直接儲存資料來劃分的話,確實可以這麼說,但是這裡還是把它稱作輔助索引,因為這樣不容易引起混淆。
這指的是innodb儲存引擎對於非主鍵列的索引??,在他的b+樹的葉子節點的data域儲存了行的主鍵值,因此這種索引方式都需要「二次查詢」,也就是說先通過輔助索引首先找到的主鍵值,再通過主鍵值去聚簇索引中查詢對應的行資料。
主鍵,非主鍵:非聚簇索引
就是指b+tree的葉子節點上的data域並不直接儲存資料,而是資料的位址(其實也可以叫做指標)。並且myisam引擎的主索引和輔助索引在結構上沒有任何區別,唯一的區別是主索引要求key是唯一的,而輔助索引的key可以重複。
1、訪問速度快,因為把索引和資料放在了一起,只要找到了索引,立即可以獲得資料
2、相比非聚簇索引,可以減少磁碟的io次數。因為非聚簇索引沒有直接儲存資料
3、乙個資料表只能有乙個聚簇索引,但可以有多個非聚簇索引;
參考**:
MySQL 聚簇索引 和 非聚簇索引
索引節點的葉子頁面就好比一片葉子。葉子頭便是索引鍵值。先建立一張表 create table user id intnot null name varchar notnull class varchar notnull 對於myisam引擎,如果建立 id 和 name 為索引。對於下面查詢 sel...
MySQL聚簇索引和非聚簇索引
聚簇索引是指葉子節點儲存的是一整行記錄,比如innodb的主鍵索引,主鍵和表資料儲存在一起。聚簇索引並不是一種單獨的索引型別,而是一種資料儲存方式,因為一行資料不能同時儲存在兩個地方,所以一張表中只能有乙個聚簇索引,因為一張表的資料儲存順序只能是一種,故只有innodb主鍵索引是聚簇索引。聚簇索引的...
聚簇索引和非聚簇索引
一 聚簇索引 clustered indexes 的使用 聚簇索引是一種對磁碟上實際資料重新組織以按指定的乙個或多個列的值排序。由於聚簇索引的索引頁面指標指向資料頁面,所以使用聚簇索引查詢資料幾 乎總是比使用非聚簇索引快。每張表只能建乙個聚簇索引,並且建聚簇索引需要至少相當該錶120 的附加空間,以...