对GUID字段的唯一约束是否存在性能损失

时间:2017-02-12 04:28:47

标签: sql sql-server

我对GUID字段有一个唯一约束。这样做有性能损失吗?我在网上看到,在GUID字段上放置索引会导致碎片化。独特的约束会受到碎片的影响吗?

1 个答案:

答案 0 :(得分:2)

如果您使用索引而不使用好的索引键,则必须支付碎片费用。虽然它对您有何影响,depends on the way you query

唯一约束,将作为唯一非聚集索引强制执行。下面是唯一约束的碎片的一个小例子

演示:

create table dbo.temp
(
id int identity ,
guidd  uniqueidentifier unique  default newid()
)



insert into dbo.temp
(guidd)
select NEWID()
go 1000

select object_name(object_id) as name,index_id,index_type_desc,avg_fragmentation_in_percent
 from sys.dm_db_index_physical_stats(0,0,null,null,null)
 where object_id=object_id('temp')

name    index_id    index_type_desc   avg_fragmentation_in_percent
temp    0             HEAP                0
temp    2            NONCLUSTERED INDEX   75

无论表是堆还是群集(不考虑存储注意事项),都必须支付维护非聚簇索引的罚款。由于聚簇索引/堆上的每个插入/删除/更新操作都需要两个操作。一个修改聚簇索引或堆,一个修改非聚簇索引