在mysql索引實現原理中,我們提到了聚簇索引和非聚簇索引,在這裡對這兩個索引進行更深一步的**。
首先我們需要知道:在innodb表中,表資料檔案本身就是按b+樹組織的乙個索引結構,聚簇索引就是按照每張表的主鍵構造一顆b+樹,同時葉子結點中存放的就是整張表的行記錄資料,所以聚簇索引的葉子結點也被稱為資料頁。
而我們在日常工作中,根據實際情況自行新增的索引都是輔助索引,輔助索引就是乙個為了尋找主鍵索引的二級索引,它先尋找到主鍵索引,再通過主鍵索引去尋找資料。
所以聚簇索引並不是一種單獨的索引型別,而是一種資料儲存方式。
聚簇索引和非聚簇索引都有許多別名,聚簇索引可以被稱為主鍵索引、聚集索引,而非聚簇索引也可以被稱為輔助索引、二級索引。這兩種索引的內部都是b+樹。
聚簇索引就是按照每張表的主鍵構造一顆b+樹,同時葉子節點中存放的就是整張表的行記錄資料,這個葉子節點也被稱為資料頁。這個特性決定了索引組織表中資料也是索引的一部分,每張表只能擁有乙個聚簇索引。
innodb通過主鍵聚集資料,如果沒有定義主鍵,innodb會選擇非空的唯一索引代替。如果沒有這樣的索引,innodb會隱式的定義乙個主鍵來作為聚簇索引。
聚簇索引的優點:
缺點:
在聚簇索引之上建立的索引稱之為輔助索引,輔助索引訪問資料總是需要二次查詢。輔助索引葉子節點儲存的不是行的物理位置,而是主鍵值。因此通過輔助索引首先找到的是主鍵值,然後再通過主鍵值找到資料行的資料頁。
輔助索引的存在不影響資料在聚簇索引中的組織,所以一張表可以有多個輔助索引。
參考-聚簇索引和非聚簇索引
聚簇索引和非聚簇索引
一 聚簇索引 clustered indexes 的使用 聚簇索引是一種對磁碟上實際資料重新組織以按指定的乙個或多個列的值排序。由於聚簇索引的索引頁面指標指向資料頁面,所以使用聚簇索引查詢資料幾 乎總是比使用非聚簇索引快。每張表只能建乙個聚簇索引,並且建聚簇索引需要至少相當該錶120 的附加空間,以...
聚簇索引和非聚簇索引
一 聚簇索引 clustered indexes 的使用 聚簇索引是一種對磁碟上實際資料重新組織以按指定的乙個或多個列的值排序。由於聚簇索引的索引頁面指標指向資料頁面,所以使用聚簇索引查詢資料幾乎總是比使用非聚簇索引快。每張表只能建乙個聚簇索引,並且建聚簇索引需要至少相當該錶120 的附加空間,以存...
聚簇索引和非聚簇索引
一 聚簇索引 clustered indexes 的使用 聚簇索引是一種對磁碟上實際資料重新組織以按指定的乙個或多個列的值排序。由於聚簇索引的索引頁面指標指向資料頁面,所以使用聚簇索引查詢資料幾 乎總是比使用非聚簇索引快。每張表只能建乙個聚簇索引,並且建聚簇索引需要至少相當該錶120 的附加空間,以...