聚簇索引並不是一種單獨的索引型別,而是一種資料儲存方式,具體細節依賴於其實現方式。
mysql資料庫中innodb儲存引擎,b+樹索引可以分為:
這兩種索引內部都是b+樹,聚集索引的葉子節點存放著一整行的資料。
innobd中的主鍵索引是一種聚簇索引,非聚簇索引都是輔助索引,像復合索引、字首索引、唯一索引。
innodb中,表資料檔案本身就是按b+樹組織的乙個索引結構,聚簇索引就是按照每張表的主鍵構造一顆b+樹,同時葉子節點中存放的就是整張表的行記錄資料,也將聚集索引的葉子節點稱為資料頁。這個特性決定了索引組織表中資料也是索引的一部分;一般建表會用乙個自增主鍵做聚簇索引,沒有的話mysql會預設建立,但是這個主鍵如果更改代價較高,故建表時要考慮自增id不能頻繁update這點。
我們日常工作中,根據實際情況自行新增的索引都是輔助索引,輔助索引就是乙個為了需要找主鍵索引的二級索引,現在找到主鍵索引再通過主鍵索引找資料。
innodb通過主鍵聚集資料,如果沒有定義主鍵,innodb會選擇【非空】的唯一索引代替。如果沒有這樣的索引,innodb會隱式的定義乙個主鍵來作為聚簇索引。
聚簇索引的優缺點:
缺點在聚簇索引之上建立的索引稱之為輔助索引,輔助索引訪問資料總是需要二次查詢。
輔助索引葉子節點儲存的不再是行的物理位置,而是主鍵值。通過輔助索引首先找到的是主鍵值,再通過主鍵值找到資料行的資料頁,再通過資料頁中的page directory找到資料行。
innodb輔助索引的葉子節點並不包含行記錄的全部資料,葉子節點除了包含鍵值外,還包含了相應行資料的聚簇索引鍵。
輔助索引的存在不影響資料在聚簇索引中的組織,所以一張表可以有多個輔助索引。在innodb中有時也稱輔助索引為二級索引。
mysql聚簇索引和非聚簇索引,主鍵索引和其它索引
聚簇索引的葉子節點就是資料節點,主鍵就是聚簇索引,乙個表就乙個主鍵,乙個表也就乙個聚簇索引。非聚簇索引 二級索引 的葉子節點存的是主鍵索引,所以查詢未使用覆蓋索引時,儲存引擎需要先找到二級索引葉子節點對應的主鍵值,然後通過聚簇索引找到目標行記錄,即回表操作。這裡順便提一下覆蓋索引,我們知道索引節點本...
聚簇索引和非聚簇索引
一 聚簇索引 clustered indexes 的使用 聚簇索引是一種對磁碟上實際資料重新組織以按指定的乙個或多個列的值排序。由於聚簇索引的索引頁面指標指向資料頁面,所以使用聚簇索引查詢資料幾 乎總是比使用非聚簇索引快。每張表只能建乙個聚簇索引,並且建聚簇索引需要至少相當該錶120 的附加空間,以...
聚簇索引和非聚簇索引
一 聚簇索引 clustered indexes 的使用 聚簇索引是一種對磁碟上實際資料重新組織以按指定的乙個或多個列的值排序。由於聚簇索引的索引頁面指標指向資料頁面,所以使用聚簇索引查詢資料幾乎總是比使用非聚簇索引快。每張表只能建乙個聚簇索引,並且建聚簇索引需要至少相當該錶120 的附加空間,以存...