我們平時建立的索引唯一鍵索引,復合索引,字首索引都是非聚簇索引,有的也叫輔助索引(secondary index).其資料結構是b+樹。
在mysql中,聚簇索引沒有語句可以生成,在 innodb中,資料是按照主鍵的順序來進行儲存的。葉子節點就是存放每條記錄的。由於表所有資料只能按照乙個b+樹進行排序,每個表只能有乙個聚簇索引。
在mysql innodb中,聚簇索引預設就是主鍵索引。
如果沒有主鍵,會找乙個不為空的唯一索引當該表的聚簇索引。如果沒有這樣的索引,innodb會隱式新建乙個索引字段。
自增id與uuid的區別,自增id由於儲存連續,寫入效能更高,uuid會頻繁移動資料保持b+樹結構。
每新建乙個非聚簇索引就會增加乙個b+樹結構,該葉子節點存放了對應索引欄位的指和聚簇索引的值,如果條件查詢使用該索引,查詢會先查詢非聚簇索引找到值,如果值會查詢的字段直接返回,否則還會去查詢聚簇索引的b+樹查詢到完整的記錄,增加io次數。
如果新增索引,後面插入資料開銷會變大,因為需要維護b+樹。
聚簇索引與非聚簇索引
聚簇索引介紹 聚簇索引並不是一種單獨的索引型別,而是一種資料儲存方式。具體的細節依賴於實現方式,例innodb的聚簇索引實際上在同乙個結構中儲存了b tree索引和資料行。當表有聚簇索引時,他的資料行實際放在索引的葉子頁 leaf page 術語 聚簇 聚簇索引實現 儲存引擎負責實現索引,因此不是所...
聚簇索引與非聚簇索引
mysql的索引主要使用b 樹和雜湊索引的方式進行組織。雜湊索引底層即是雜湊表,查詢時只需要進行一次雜湊操作即可得到位址,查詢速度比較快,但是查詢時操作只適合 的查詢操作,對於範圍查詢不友好,因此只適用於大多數需求為單錶查詢的情況。mysql中常用的兩大引擎myisam和innodb 對於b 樹的使...
聚簇索引與非聚簇索引區別
聚集索引與非聚集索引的區別是 葉節點是否存放一整行記錄 innodb 主鍵使用的是聚簇索引,myisam 不管是主鍵索引,還是二級索引使用的都是非聚簇索引。下圖形象說明了聚簇索引表 innodb 和非聚簇索引 myisam 的區別 聚簇索引與非聚簇索引 1.對於非聚簇索引表來說 右圖 表資料和索引是...