我有一个以整数(4 字节)为主键的表。它被定义为一个身份。它也是聚集索引。
插入工作非常好。插入 2000 行后,碎片大约为 4%。
但是,每条记录之后将至少更新 3 次。这会生成超过 99% 的聚集索引碎片(使用默认填充因子)。
或者使用我测试的其他填充因子: - 将聚集索引的填充因子设置为 80(碎片 > 98%) - 将聚集索引的填充系数设置为 50(碎片 > 94%)
所以这看起来没什么帮助......
我在一个新创建的表上测试了每个填充因子设置,其中包含 2000 个插入(以及 3 个以上的更新)
没有查询中不包含主键的选择或更新。
有没有人知道为什么这个索引有这么高的碎片?
通过 ADO.NET 进行更新,这是生成的命令(由 SQL Profiler 跟踪):
exec sp_executesql N'UPDATE MyTable SET MyValue = @MyValue WHERE MyId = @MyId',
N'@MyValue varchar(50),@MyId int',@MyValue='This is some random value',@MyId=1234
Run Code Online (Sandbox Code Playgroud)
其他更新遵循相同的模式(更新其他值,但始终提供@MyId 参数)
感谢您的帮助 :)
index sql-server clustered-index fragmentation sql-server-2012