MySQL聚簇索引和非聚簇索引

2021-10-06 23:22:09 字數 670 閱讀 8441

聚簇索引是指葉子節點儲存的是一整行記錄,比如innodb的主鍵索引,主鍵和表資料儲存在一起。聚簇索引並不是一種單獨的索引型別,而是一種資料儲存方式,因為一行資料不能同時儲存在兩個地方,所以一張表中只能有乙個聚簇索引,因為一張表的資料儲存順序只能是一種,故只有innodb主鍵索引是聚簇索引。

聚簇索引的存放順序和資料的物理儲存順序是一致的,即只要是索引是挨著的,那麼對應的資料在磁碟上的儲存位置一定也是挨著的。

這裡有乙個問題:如果我們不用自增的字段作為主鍵,而使用字串的話,會有什麼不妥的地方?我們來分析看下:

優勢可以一次性將相鄰的資料載入到記憶體中,減少了磁碟io次數

由於聚簇索引是將索引和資料儲存在一起,那麼我們找到索引位置的時候實際上就是找到了具體的資料,否則還要進行一次磁碟io去將最終資料撈出來

劣勢插入速度嚴重依賴於插入順序:如果使用的是非自增主鍵,則可能需要進行頁的**,非常影響效能

主鍵更新代價大:更新一次主鍵,可能導致被更新的行發生移動,引起頁的**,非常影響效能

二級索引查詢需要再次根據主鍵索引回表查詢整行資料,因為innodb的二級索引的葉子節點儲存的是主鍵的值

非聚簇索引的葉子節點儲存的是主鍵值或行資料儲存的物理位置,myisam甭管是主鍵還是非主鍵索引都是非聚簇索引索引,innodb的非主鍵索引用的也是非聚簇索引,但是這兩種儲存引擎的非主鍵索引的葉子節點儲存的內容是不同的。

MySQL 聚簇索引 和 非聚簇索引

索引節點的葉子頁面就好比一片葉子。葉子頭便是索引鍵值。先建立一張表 create table user id intnot null name varchar notnull class varchar notnull 對於myisam引擎,如果建立 id 和 name 為索引。對於下面查詢 sel...

聚簇索引和非聚簇索引

一 聚簇索引 clustered indexes 的使用 聚簇索引是一種對磁碟上實際資料重新組織以按指定的乙個或多個列的值排序。由於聚簇索引的索引頁面指標指向資料頁面,所以使用聚簇索引查詢資料幾 乎總是比使用非聚簇索引快。每張表只能建乙個聚簇索引,並且建聚簇索引需要至少相當該錶120 的附加空間,以...

聚簇索引和非聚簇索引

一 聚簇索引 clustered indexes 的使用 聚簇索引是一種對磁碟上實際資料重新組織以按指定的乙個或多個列的值排序。由於聚簇索引的索引頁面指標指向資料頁面,所以使用聚簇索引查詢資料幾乎總是比使用非聚簇索引快。每張表只能建乙個聚簇索引,並且建聚簇索引需要至少相當該錶120 的附加空間,以存...