聚簇索引與非聚簇索引

2021-10-06 19:26:07 字數 897 閱讀 5849

聚簇索引介紹:

聚簇索引並不是一種單獨的索引型別,而是一種資料儲存方式。具體的細節依賴於實現方式,例innodb的聚簇索引實際上在同乙個結構中儲存了b-tree索引和資料行。

當表有聚簇索引時,他的資料行實際放在索引的葉子頁(leaf page),術語「聚簇」。

聚簇索引實現:

儲存引擎負責實現索引,因此不是所有的儲存引擎都支援聚簇索引。

聚簇索引列選取規則:

一些資料庫伺服器允許選擇哪個索引作為聚簇索引,mysql5.6及之前內建的儲存引擎未能支援這一點。innodb將通過主鍵聚集資料。若沒有定義主鍵列,innodb會選擇乙個唯一的非空索引來作為聚簇索引。如果兩個索引列都不存在。innodb會隱式定義乙個主鍵來作為聚簇索引。

非聚簇索引:

索引和資料行內容分開儲存。索引關聯到指標,指標關聯到具體資料行,一次查詢。

什麼是頁**:

當行的主鍵值必須將這一行插入到某個已滿的頁中,儲存引擎會將該頁分成兩個頁面來容納改行,這就是一次頁**操作。頁**會導致表占用更多磁碟空間。

innodb是頁的方式儲存嗎?是的

innodb聚簇索引儲存結構:

聚簇和非聚簇表對比圖:

innodb二級索引查詢出主鍵列值後,再根據主鍵列值在主鍵索引二次查詢。

注:聚簇索引最後乙個葉子節點,包含key值和資料行。

參考書籍:《高效能myql 第三版》

聚簇索引與非聚簇索引

mysql的索引主要使用b 樹和雜湊索引的方式進行組織。雜湊索引底層即是雜湊表,查詢時只需要進行一次雜湊操作即可得到位址,查詢速度比較快,但是查詢時操作只適合 的查詢操作,對於範圍查詢不友好,因此只適用於大多數需求為單錶查詢的情況。mysql中常用的兩大引擎myisam和innodb 對於b 樹的使...

聚簇與非聚簇索引

我們平時建立的索引唯一鍵索引,復合索引,字首索引都是非聚簇索引,有的也叫輔助索引 secondary index 其資料結構是b 樹。在mysql中,聚簇索引沒有語句可以生成,在 innodb中,資料是按照主鍵的順序來進行儲存的。葉子節點就是存放每條記錄的。由於表所有資料只能按照乙個b 樹進行排序,...

聚簇索引與非聚簇索引區別

聚集索引與非聚集索引的區別是 葉節點是否存放一整行記錄 innodb 主鍵使用的是聚簇索引,myisam 不管是主鍵索引,還是二級索引使用的都是非聚簇索引。下圖形象說明了聚簇索引表 innodb 和非聚簇索引 myisam 的區別 聚簇索引與非聚簇索引 1.對於非聚簇索引表來說 右圖 表資料和索引是...