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

2021-10-09 07:34:36 字數 1063 閱讀 2467

聚集索引與非聚集索引的區別是:葉節點是否存放一整行記錄

innodb 主鍵使用的是聚簇索引,myisam 不管是主鍵索引,還是二級索引使用的都是非聚簇索引。

下圖形象說明了聚簇索引表(innodb)和非聚簇索引(myisam)的區別:

聚簇索引與非聚簇索引

1.對於非聚簇索引表來說(右圖),表資料和索引是分成兩部分儲存的,主鍵索引和二級索引儲存上沒有任何區別。使用的是b+樹作為索引的儲存結構,所有的節點都是索引,葉子節點儲存的是索引+索引對應的記錄的資料。

2.對於聚簇索引表來說(左圖),表資料是和主鍵一起儲存的,主鍵索引的葉結點儲存行資料(包含了主鍵值),二級索引的葉結點儲存行的主鍵值。使用的是b+樹作為索引的儲存結構,非葉子節點都是索引關鍵字,但非葉子節點中的關鍵字中不儲存對應記錄的具體內容或內容位址。葉子節點上的資料是主鍵與具體記錄(資料內容)。

1.當你需要取出一定範圍內的資料時,用聚簇索引也比用非聚簇索引好。

2.當通過聚簇索引查詢目標資料時理論上比非聚簇索引要快,因為非聚簇索引定位到對應主鍵時還要多一次目標記錄定址,即多一次i/o。

3.使用覆蓋索引掃瞄的查詢可以直接使用頁節點中的主鍵值。

1.插入速度嚴重依賴於插入順序,按照主鍵的順序插入是最快的方式,否則將會出現頁**,嚴重影響效能。因此,對於innodb表,我們一般都會定義乙個自增的id列為主鍵。

2.更新主鍵的代價很高,因為將會導致被更新的行移動。因此,對於innodb表,我們一般定義主鍵為不可更新。

3.二級索引訪問需要兩次索引查詢,第一次找到主鍵值,第二次根據主鍵值找到行資料。

4.採用聚簇索引插入新值比採用非聚簇索引插入新值的速度要慢很多,因為插入要保證主鍵不能重複,判斷主鍵不能重複,採用的方式在不同的索引下面會有很大的效能差距,聚簇索引遍歷所有的葉子節點,非聚簇索引也判斷所有的葉子節點,但是聚簇索引的葉子節點除了帶有主鍵還有記錄值,記錄的大小往往比主鍵要大的多。這樣就會導致聚簇索引在判定新記錄攜帶的主鍵是否重複時進行昂貴的i/o代價。

聚簇索引與非聚簇索引

聚簇索引介紹 聚簇索引並不是一種單獨的索引型別,而是一種資料儲存方式。具體的細節依賴於實現方式,例innodb的聚簇索引實際上在同乙個結構中儲存了b tree索引和資料行。當表有聚簇索引時,他的資料行實際放在索引的葉子頁 leaf page 術語 聚簇 聚簇索引實現 儲存引擎負責實現索引,因此不是所...

聚簇索引與非聚簇索引

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

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

聚集索引確定表中資料的物理順序。聚集索引類似於 簿,後者按姓氏排列資料。由於聚集索引規定資料在表中的物理儲存順序,因此乙個表只能包含乙個聚集索引。但該索引可以包含多個列 組合索引 就像 簿按姓氏和名字進行組織一樣。聚集索引對於那些經常要搜尋範圍值的列特別有效。使用聚集索引找到包含第乙個值的行後,便可...