MySQL面試題 聚簇索引和非聚簇索引

2021-10-08 21:42:42 字數 795 閱讀 9545

1.1聚簇索引

將資料儲存與索引放到了一塊,找到了索引也就找到了資料,當表有聚簇索引時,它的資料實際上存放在索引的葉子頁上,也就是b+樹的葉子節點上,因為資料行不能存在兩個地方,所以乙個表只能有乙個聚簇索引,在innodb中通過主鍵聚集資料,如果沒有定義主鍵,innodb會選擇乙個唯一的非空索引代替。如果沒有這樣的索引,innodb會隱式定義乙個主鍵來作為聚簇索引

1.2非聚簇索引

將資料儲存與索引分開,索引結構的葉子節點指向了資料的對應行,在非聚簇索引中,索引中的邏輯順序並不等同於表中行的物理順序,索引是指向表中行的位置的指標,這些指標本身是有序的,通過這些指標可以在表中快速定位

1.3補充

聚簇索引和非聚簇索引的根本區別是資料記錄的排列順序和索引順序是否一致,聚簇索引表記錄的排列順序與索引的排列順序一致,優點是查詢速度快,缺點是對錶進行修改速度比較慢,這是為了保持表中的記錄的物理順序與索引的順序一致

非聚簇索引指定了表中記錄的邏輯順序,資料記錄的物理順序和索引的順序不一致,聚集索引和非聚集索引都採用了b樹的結構,但非聚簇索引的葉子層順序與實際的資料葉並不相同。在對聚簇索引查詢時,聚簇索引的速度一般要比非聚簇索引快。

1.4何時使用聚簇索引和非聚簇索引

當我們經常對錶中的記錄進行修改操作時,應該使用非聚簇索引,聚簇索引適用於列經常被分組排序、表中記錄比較少、需要返回某範圍內的資料

2.1非聚簇索引一定會回表查詢嗎

不一定,當查詢語句所要求的字段全部命中了索引,就不用再回表查詢了

MySQL 聚簇索引 和 非聚簇索引

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

MySQL聚簇索引和非聚簇索引

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

聚簇索引和非聚簇索引

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