我对GUID字段有一个唯一约束。这样做有性能损失吗?我在网上看到,在GUID字段上放置索引会导致碎片化。独特的约束会受到碎片的影响吗?
答案 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
无论表是堆还是群集(不考虑存储注意事项),都必须支付维护非聚簇索引的罚款。由于聚簇索引/堆上的每个插入/删除/更新操作都需要两个操作。一个修改聚簇索引或堆,一个修改非聚簇索引