聚簇索引和非聚簇索引的區別

2021-08-01 06:51:21 字數 1584 閱讀 6307

聚簇索引和非聚簇索引

(1)定義

聚簇索引的順序就是資料的物理儲存順序;

非聚簇索引的解釋是:索引順序與資料物理排列順序無關。

(2)索引底層實現結構是b+樹,二叉樹的一種;

聚簇索引:索引的葉節點就是資料節點(索引值)。而非聚簇索引的葉節點仍然是索引節點(告訴你怎麼在表中查詢這一記錄),只不過有乙個指標指向對應的資料塊。如下圖(原圖請見

索引快的原因:

大家都知道,索引可以提高檢索效率,因為它的二叉樹結構以及占用空間小,所以訪問速度塊。讓我們來算一道數學題:如果表中的一條記錄在磁碟上占用 1000位元組的話,我們對其中10位元組的乙個字段建立索引,那麼該記錄對應的索引塊的大小只有10位元組。我們知道,sql server的最小空間分配單元是「頁(page)」,乙個頁在磁碟上占用8k空間,那麼這乙個頁可以儲存上述記錄8條,但可以儲存索引800條。現在我 們要從乙個有8000條記錄的表中檢索符合某個條件的記錄,如果沒有索引的話,我們可能需要遍歷8000條×1000位元組/8k位元組=1000個頁面(資料塊)才能 夠找到結果。如果在檢索欄位上有上述索引的話,那麼我們可以在8000條×10位元組/8k位元組=10個頁面(索引快)中就檢索到滿足條件的索引塊,然後根據索引塊上 的指標逐一找到結果資料塊,這樣io訪問量要少的多。

索引優化技術

是不是有索引就一定檢索的快呢?答案是否。有些時候用索引還不如不用索引快。比如說我們要檢索上述表中的所有記錄,如果不用索引,需要訪問8000 條×1000位元組/8k位元組=1000個頁面,如果使用索引的話,首先檢索索引,訪問8000條×10位元組/8k位元組=10個頁面得到索引檢索結果,再根 據索引檢索結果去對應資料頁面,由於是檢索所有資料(b+樹查詢是從根節點到子節點遍歷一遍的,所以需要檢索所有資料),所以需要再訪問8000條×1000位元組/8k位元組=1000個頁面將全部資料讀取出來,一共訪問了 1010個頁面,這顯然不如不用索引快。

索引對應的sql語句

(1)為student表的sno列建立非聚簇索引

use db1

create index ix_stu_sno on student(sno)

(2)為student表的sno列建立唯一的聚簇索引

use db1

create unique clustered index ix_stu_sno1 on student(sno)

總結索引使用場景:

1:不要索引資料量不大的表,對於小表來講,表掃瞄的成本並不高。

2:不要設定過多的索引,在沒有聚集索引的表中,最大可以設定249個非聚集索引,過多的索引首先會帶來更大的磁碟空間,而且在資料發生修改時,對索引的維護是特別消耗效能的。

3:合理應用復合索引,有某些情況下可以考慮建立包含所有輸出列的覆蓋索引。

4:對經常使用範圍查詢的字段,可能考慮聚集索引。

5:避免對不常用的列,邏輯性列,大字段列建立索引。

聚簇索引和非聚簇索引

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

聚簇索引和非聚簇索引

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

聚簇索引和非聚簇索引

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