1. 程式人生 > 其它 >聚集索引和非聚集索引

聚集索引和非聚集索引

聚集索引和非聚集索引

一言以蔽之,聚集索引就是索引順序和物理順序一致的索引結構,非聚集索引是索引順序與物理順序不一致的索引結構。

他們之間的關係有點像陣列和雜湊表,陣列的下標就是聚集索引,雜湊表的鍵就是非聚集索引。

Mysql中,聚集索引和非聚集索引的底層結構都是B+樹

聚集索引

mysql中,主鍵就是加了唯一性約束的聚集索引,如果我們在建立表的時候不顯式指定主鍵,mysql會自動為我們選擇一列作為主鍵。

聚集索引一張表只能有一個,這是因為聚集索引的索引順序與物理排列順序一致,而物理排列順序只能有一個。當然我們可以刪除現有的聚集索引而重新設定一個,但這樣會造成資料的物理重排。

在聚集索引的底層B+樹中,葉子節點儲存的就是每一個記錄的全部資料。

非聚集索引

非聚集索引的底層B+樹中,葉子節點儲存的是非聚集索引的索引列和聚集索引的索引列,然後會有一個欄位指向實際的物理資料儲存地址。

這就涉及到一個二次查詢問題,當我們檢索資料帶上了非索引欄位時,就不得不再去實際資料的物理儲存地址取一次資料。

解決二次查詢問題的方法就是為常需要同時檢索的資料建立多重索引,且符合最左字首匹配法則。

ps

具體的說明可參照下面的連結,已經非常細緻了,上述只是自己簡化的記憶。

參考資料:

[1] 聚集索引與非聚集索引的總結