聚簇索引(CLUSTERED)

2021-10-09 21:48:11 字數 1593 閱讀 6726

ps:聚簇索引唯一,唯一索引每個值唯一

聚簇索引(clustered index)和非聚簇索引(non- clustered index)

最通俗的解釋是:聚簇索引的順序就是資料的物理儲存順序,而對非聚簇索引的索引順序與資料物理排列順序無關。舉例來說,你翻到新華字典的漢字「爬」那一頁就是p開頭的部分,這就是物理儲存順序(聚簇索引);而不用你到目錄,找到漢字「爬」所在的頁碼,然後根據頁碼找到這個字(非聚簇索引)。」

聚簇索引在sql sever中可以自定義,指令如下:(*預設值)

create

[unique][

clustered

]index

on<

table name>

(column[*

asc,

desc])

;

由於環境是mysql8,因此在建立時沒有clustered選項,便感到疑惑

於是上網康了大神的部落格以後

發現聚簇索引不過是一種機制,而mysql作為保姆級dms將該選項簡化(可能是為了方便入門者)

而部落格指出:mysql是多引擎的dms,因此主要的引擎包括*innodb和myisam

show engines;

# —檢視當前預設引擎

1.1、更改方式1:修改配置檔案my.ini

將my-small.ini另存為my.ini,在[mysqld]後面新增default-storage-engine=innodb,重啟服務,資料庫預設的引擎修改為innodb

1.2、更改方式2:在建表的時候指定

建表時指定:

create

table mytbl( id int

primary

key, name varchar(50

))type

=myisam;

2.3、更改方式3:建表後更改

alter

table mytbl2 type

=innodb

;

innodb會預設隱式建立聚簇索引以提公升查詢效率,減少記憶體碎片(像棧一樣壓在一起)

無論是sql server還是mysql,預設主鍵行為都為聚簇索引。(所以在sql server上可以討論優化效能的問題)

對於mysql的使用者只能被動地交給innodb來處理index方面的效能問題

從這個方面來看,sql server更像是使用者來控制效能

mysql傾向與被引擎控制定義方法,放在這個問題上,就是

「建議主鍵附帶自增約束」

初學者最大的誤區:把主鍵自動設為聚簇索引

因為這是sqlserver的預設主鍵行為,你設定了主鍵,它就把主鍵設為聚簇索引,而乙個表最多只能有乙個聚簇索引,所以很多人就把其他索引設定為非聚簇索引。這個是最大的誤區。甚至有的主鍵又是無意義的自動增量字段,那樣的話clustered index對效率的幫助,完全被浪費了。

聚簇索引和非聚簇索引

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

聚簇索引和非聚簇索引

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

聚簇索引和非聚簇索引

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