05 索引 非聚集索引 1 聚集表

2022-02-09 05:18:53 字數 2220 閱讀 1262

建立非聚集索引

create

nonclustered

index

ncix_employee001_department_organization

onemployee001

(department

,organization

);alter

index

ncix_employee001_department_organization

onemployee001

reorganize

索引情況

select

database_id

,index_id

,index_type_desc

,index_depth

,index_level

,page_count

from

sys.

dm_db_index_physical_stats

(db_id

('indexdb'

),object_id

('employee001'

),null,null,null)

變成了兩個索引

其中 聚集索引頁數量為 1615,其實就是資料頁的數量

非聚集索引的數量為 1244

重新查詢dbcc ind

truncate

table

dbccindresult

insert

into

dbccindresult

exec

('dbcc ind(indexdb,employee001,-1)'

)分析結果

select

*from

dbccindresult

where

pagetype=2

andindexid=1

之前建立的聚集索引頁沒有任何變化 依舊是 1+16=17個

select

*from

dbccindresult

where

pagetype=2

andindexid=3

同時,增加了一些indexid=3的頁,就是剛剛建立的非聚集索引頁

非聚集索引的indexlevel =2 的數量為 1  indexlevel=1 的數量為 18 indexlevel=0 的頁數量為 1244

1+18+1244=1263

注意 跟聚集索引不同的是 聚集索引 indexlevel=0的是資料頁 而非聚集索引卻是索引頁

從根節點開始看

找到根select

*from

dbccindresult

where

pagetype=2

andindexid=3

andindexlevel=2

--結果 250

檢視dbcc

traceon

(3604

)dbcc

page

(indexdb,1

,250,3

);indexlevel =1 的頁有18個

接著檢視 indexlevel =1 的索引頁

接著檢視indexlevel=0的頁(索引頁!!!)

注意到 每個非聚集索引頁中都有乙個id (key)列

在非聚集索引的葉子層,每個索引行包含非聚集索引鍵值(keyhashvalue)和行定位器。這個定位器指向聚集索引或堆表的資料行。

根據這個定位器可以定位到一行資料。

如果聚集表,存在聚集索引,則聚集索引,即圖中的id(key) 作為定位器。

如果是堆表,它沒有聚集索引,行定位器是個指向行的指標。這個指標由頁裡行的(檔案號:頁號:槽號,file identifier :page number :slot number)組成

行定位器主要用於查詢不在非聚集索引鍵列定義中的列時,需要定位到行中將資料讀取出來。

這時候會先定位到需要的非聚集索引,然後根據行定位器找到資料(rid lookup or key lookup)

後續會再介紹。

接下來 看非聚集索引的查詢過程:

setstatistics

ioon

select

department

from

employee001

where

department

='dep7'

可以看到使用了索引(非聚集索引)查詢

聚集索引 非聚集索引

通常情況下,建立索引是加快查詢速度的有效手段。但索引不是萬能的,靠索引並不能實現對所有資料的快速訪問。事實上,如果索引策略和資料檢索需求嚴重不符的話,建立索引反而會降低查詢效能。因此在實際使用當中,應該充分考慮到索引的開銷,包括磁碟空間的開銷及處理開銷 如資源競爭和加鎖 例如,如果資料頻繁的更新或刪...

聚集索引和非聚集索引

聚集索引和非聚集索引 一 聚集索引和非聚集索引 聚集索引和非聚集索引的根本區別是表記錄的排列順序和與索引的排列順序是否一致,聚集索引表記錄的排列順序與索引的排列順序一致,優點是查詢速度快,因為一旦具有第乙個索引值的紀錄被找到,具有連續索引值的記錄也一定物理的緊跟其後。聚集索引的缺點是對錶進行修改速度...

聚集索引和非聚集索引

本文引自 一種索引,該索引中鍵值的邏輯順序決定了表中相應行的物理順序。聚集索引確定表中資料的物理順序。聚集索引類似於 簿,後者按姓氏排列資料。由於聚集索引規定資料在表中的物理儲存順序,因此乙個表只能包含乙個聚集索引。但該索引可以包含多個列 組合索引 就像 簿按姓氏和名字進行組織一樣。聚集索引對於那些...