亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

唯一索引和非唯一索引的區別簡析

2024-07-21 02:50:52
字體:
來源:轉載
供稿:網友
唯一索引和非唯一索引的區別簡析

SQL Server創建索引時,可以指定Unique使之成為唯一索引?!拔ㄒ弧鳖櫭剂x,但是兩都到底有什么區別呢?因為索引也是一種物理結構,所以還是要從存儲和結構上分析。

索引結構分葉級非葉級,分析時我們要分開來看,這個很重要。

文中涉及的索引行大小計算,參考MSDN估計數據庫大小索引部分。

1. 非唯一聚集索引和唯一聚集索引

創建兩個測試表,各10000條整數,tb1唯一,tb2非唯一,有1000條為9999的重復值。

Codecreate table tb1(col1 int);declare @i int=1while @i<10001begin insert into tb1 values(@i); set @i=@i+1; end;create unique clustered index ucix on tb1 (col1)go-------create table tb2(col2 int);declare @i int=1while @i<9001begin insert into tb2 values(@i); set @i=@i+1; end;goinsert into tb2 values(9999)go 1000;create clustered index cix on tb2 (col2)go

先查詢索引的一些基本狀況:

image

從上面的結果可以看到,無論是葉級還是非葉級,非唯一聚集索引的索引行都比唯一的大一些,所以所占頁也多一點。當然,因為測試數據很小,又是int,所以不明顯。

那到底大在哪里呢?將兩者的非葉級頁和葉級頁放在一起比一下就知道了。先找出頁號,再用DBCC PAGE來查看。

通過Paul S. Randal寫的存儲過程sp_allocationMetadata可以查到根頁和每級索引的首頁。

image

就挑這兩個頁做對比。

image

發現多出一個UNIQUIFIER,同樣葉級也是一樣。MSDN說明:

如果聚集索引不是唯一的索引,SQL Server 將添加在內部生成的值(稱為唯一值)以使所有重復鍵唯一。此四字節的值對于用戶不可見。僅當需要使聚集鍵唯一以用于非聚集索引中時,才添加該值。”

還有UNIQUIFIER不是一個全局自增列,重復記錄增加時此值會發生改變,并且它是一個可為null的變長列。

現在來算一算索引行大?。?/p>

兩個表都是只有一個int型可為NULL的字段,而聚集索引葉級是存儲數據本身

葉級是一個4字節的INT列,無變長列,加上3字節的NULL位圖,再加上4字節的行頭開銷:兩個表的葉級minSize =4+0+3+4=11

非葉級是一個4字節的INT列,無變長列,加上3字節的NULL位圖,加上1字節的行頭開銷,再加6字節的子頁指針:兩個表的非葉級minSize=4+0+3+1+6=14

tb1的索引行大小是一致的minSize=maxSize,因為它是唯一的。tb2的索引行大小不一致,有大有小,大的索引行是因為:a)不唯一 b)UNIQUIFIER

唯一標識列增加了2+1*2+4=8字節開銷,tb2的min和max相差就是這8字節。

tb2的葉級maxSize=4+8+3+4=19

tb2的非葉級maxSize=4+8+3+1+6=22

小結:非唯一聚集索引為保證索引鍵值唯一性,會生成UNIQUIFIER與鍵列一起組成索引鍵值。同時無論在葉級還是非葉頁級,都比唯一索引占用更多存儲空間。

2.堆表上的唯一和非唯一的非聚集索引

Codecreate  table IndexTest(id int identity, UniqueCol int, NonuniqueCol int) go set nocount on; declare @i int=1; while @i<100000 begin  insert into IndexTest  values(@i,@i);  set @i=@i+1; end set nocount off; go create unique index UIX_UniqueCol on IndexTest (UniqueCol); create index IX_NonuniqueCol on IndexTest (NonuniqueCol);go select i.name,ips.index_id,ips.index_type_desc,index_depth,index_level,page_count,record_count,min_record_size_in_bytes as minSize,max_record_size_in_bytes as maxSize,avg_record_size_in_bytes as avgSizefrom sys.dm_db_index_physical_stats(DB_ID('test'),OBJECT_ID('IndexTest'),null,null,'DETAILED') ipsinner join sys.indexes ion ips.object_id=i.object_id and ips.index_id=i.index_idorder by name,index_level

image

兩者的頁級大小是一樣的,非葉級頁的相差8bytes。

跟1.中的分析方法一樣,挑兩個非葉級頁出來對比一下,看相差在哪里。

image

非唯一索引行多了一個HEAP RID,MSDN說明:

如果非聚集索引不是唯一的,數據行定位符將與非聚集索引鍵組合使用,以便為每一行生成唯一的鍵值。如果非聚集索引在堆上,則數據行定位符是堆 RID。其大小是 8 個字節。

兩者葉級索引行大小=INT型4字節+無變長列+1字節行頭+3字節NULL位圖+8字節RID=4+0+1+3+8=16

唯一索引的非葉級行=INT型4字節+無變長列+1字節行頭+3字節NULL位圖+6字節子頁索引=14

非唯一索引的非葉級行=INT型4字節+無變長列+1字節行頭+3字節NULL位圖+6字節子頁索引+8字節的RID=22

小結:堆表上的非唯一索引在非葉級索引行上比唯一索引多出一列行定位符RID,而葉級是一樣的,都有RID列。所以非唯一要占用更多的空間。

3.唯一聚集索引表上的唯一和非唯一非聚集索引

跟2.中的測試數據一樣,只是把ID列改成聚集主鍵。執行:

Code alter table IndexTest add constraint PK_IndexTest PRimary key clustered (ID)

image

這里有意思的是聚集索引的非葉級行只有11字節,跟同樣的1.中的14相差了3字節。這3字節是因為現在這個表,索引列是自增主鍵,是不能為NULL的,所以就沒有NULL位圖的3個字節的開銷了。

兩者的葉級行大小一樣,看一下長的是不是一樣:image

兩者的區別在于對聚集索引鍵的引用上,即“id”和“id(key)”。MSDN說明:

如果非聚集索引不是唯一的,數據行定位符將與非聚集索引鍵組合使用,以便為每一行生成唯一的鍵值。如果非聚集索引在聚集索引之上,則數據行定位符是聚集鍵。

唯一非聚集索引中的“id

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久99精品视频一区97| 粉嫩av一区二区三区免费野| 国产精品va在线播放我和闺蜜| 国产成人综合亚洲| 成人精品在线视频| 国产精品日韩精品| 亚州国产精品久久久| 久久成人精品一区二区三区| 懂色av中文一区二区三区天美| 国产精品99久久久久久久久久久久| 高清欧美性猛交| 夜夜嗨av色一区二区不卡| 社区色欧美激情 | 尤物tv国产一区| 日本不卡高字幕在线2019| 亚洲一区二区三区四区在线播放| 久久精品成人动漫| 久久成人人人人精品欧| 国产视频亚洲视频| 97人洗澡人人免费公开视频碰碰碰| 中文字幕久热精品在线视频| 欧美日韩免费在线观看| 久久久久日韩精品久久久男男| 日韩美女免费视频| 国产精品久久久久久av下载红粉| 亚洲人精品午夜在线观看| 日韩精品久久久久久久玫瑰园| 国产欧美精品在线| 亚洲国产精品推荐| 亚洲精品国产精品国自产观看浪潮| 亚洲人成电影网站| 国产精品亚洲精品| 久久亚洲国产精品成人av秋霞| 欧美亚洲另类制服自拍| 欧美一乱一性一交一视频| 高清欧美一区二区三区| 亚洲精品丝袜日韩| 黑人巨大精品欧美一区二区一视频| 日韩在线免费av| 成人福利网站在线观看11| 日韩成人网免费视频| 国产91在线播放精品91| 中日韩美女免费视频网址在线观看| 欧美激情图片区| 亚洲a一级视频| 韩日欧美一区二区| 成人xxxxx| 91中文字幕一区| 日韩av中文字幕在线播放| 国内精品400部情侣激情| 亚洲天堂男人天堂| 欧美肥老太性生活视频| 中文字幕av一区中文字幕天堂| 久久久国产精品亚洲一区| xvideos成人免费中文版| 欧美激情奇米色| 亚洲人成电影网站| 精品视频在线播放免| 欧美在线亚洲在线| 欧美激情亚洲综合一区| 国产精品嫩草影院一区二区| 国产日产亚洲精品| 亚洲第一区中文字幕| 国模叶桐国产精品一区| 狠狠躁夜夜躁人人爽超碰91| 狠狠色狠狠色综合日日小说| 2019中文字幕在线观看| 成人免费观看a| 国产精品大片wwwwww| 永久555www成人免费| 国产美女精品免费电影| 久久精品亚洲精品| 91精品久久久久久久久久另类| 国产91在线视频| 福利视频第一区| 精品亚洲一区二区三区| 国产亚洲欧洲在线| 久久久在线免费观看| 国产美女久久精品香蕉69| 国产日韩中文在线| 国产精品成人一区| 日韩av快播网址| 国产亚洲一区二区在线| 亚洲最大av网站| 亚洲成人免费在线视频| 97精品一区二区三区| 在线视频中文亚洲| 欧美亚洲视频一区二区| 久久乐国产精品| 91精品国产成人www| 亚洲第一区中文字幕| 亚洲最大福利视频网站| 精品性高朝久久久久久久| 国产91精品久久久久| 日韩精品中文字| 日韩欧美在线观看| 精品国产乱码久久久久久婷婷| 庆余年2免费日韩剧观看大牛| 国产美女精品免费电影| 亚洲成人久久电影| 一本色道久久88亚洲综合88| 日韩精品在线免费播放| 国产精品久久久久久久av大片| 成人黄色av播放免费| 日本欧美爱爱爱| 成人精品视频99在线观看免费| 久久露脸国产精品| 亚洲精选中文字幕| 亚洲欧美资源在线| 精品视频www| 国产精品夜间视频香蕉| 丝袜亚洲欧美日韩综合| 久久久久北条麻妃免费看| 91欧美精品午夜性色福利在线| 亚洲成人a**站| 2018日韩中文字幕| 色综合导航网站| 亚洲国产成人精品一区二区| 成人欧美一区二区三区黑人| 热久久这里只有| 日韩亚洲成人av在线| 亚洲黄色在线观看| 在线精品国产成人综合| 日本免费一区二区三区视频观看| 亚洲精品一区av在线播放| 欧美大片大片在线播放| 成人xxxx视频| 91九色在线视频| 欧美视频精品一区| 狠狠爱在线视频一区| 夜夜嗨av一区二区三区免费区| 国产日韩一区在线| 国产啪精品视频网站| 91在线观看免费高清完整版在线观看| 亚洲图片欧美午夜| 精品magnet| 国产精品高潮呻吟久久av黑人| 国产精品爽爽爽爽爽爽在线观看| 91久久综合亚洲鲁鲁五月天| 亚洲大胆人体在线| 国产精品视频精品视频| 国产精品高潮呻吟久久av无限| 欧美激情亚洲视频| 欧美日韩在线观看视频小说| 亚洲夜晚福利在线观看| 色综合老司机第九色激情| 欧美精品精品精品精品免费| 日本免费一区二区三区视频观看| 久久免费成人精品视频| 国产网站欧美日韩免费精品在线观看| 一夜七次郎国产精品亚洲| 国产一区二区丝袜| 亚洲精品资源美女情侣酒店| 国产不卡在线观看| 国产精品普通话| 精品一区二区亚洲| 97精品伊人久久久大香线蕉| 色综合久久精品亚洲国产| 欧美成人午夜影院| 午夜美女久久久久爽久久| 欧美日韩免费一区| 91精品久久久久久久久久久| 日韩国产高清污视频在线观看| 久久精品视频99|