(SQL Server)为什么GUID或其他随机值作为高阶键会导致碎片?

时间:2011-02-11 16:56:24

标签: sql-server indexing fragmentation defragmentation

我正在here观看Paul S Randal的索引碎片视频。在视频中,保罗说GUID or other random values as high-order key will cause page splits which in turn will cause index fragmentation。原因是,随机值意味着新记录将被插入随机页面,这可能会导致随机页面上的页面拆分。我的问题:如果新记录没有插入随机页面,页面拆分仍然可以发生,对吗?如果这是真的,这两种情况之间的区别是什么?

顺便说一句,高阶键是primary key吗?我不是母语为英语的人,也不确定。

感谢。

2 个答案:

答案 0 :(得分:3)

索引数据聚集在使用的密钥上。这里提到了“高阶”,因为索引可以是复合的,第一个成员对于订单来说是最重要的。

因此,如果此成员是随机的(并且GUID必须被视为随机的,即使加密人员不喜欢这个术语用于GUID),您将获得比插入连续值更频繁的拆分,即使值不在范围的末尾。

(这也是为什么在为群集主键使用GUID时使用NEWSEQUENTIALID()而不是NEWID()对插入性能有很大帮助的原因。)

答案 1 :(得分:1)

如果您的密钥是连续的,那么数据将全部附加在最后,这意味着将根据需要创建新页面。然而,这将创建一个“热点”,其中数据在高容量系统中被推送。对此的解决方案是在某种分类字段中使用聚簇索引,然后是递增主键。