顺序Guid和碎片

pdi*_*ddy 6 sql-server guid database-fragmentation

我试图理解顺序guid如何比常规guid更好.

是因为使用常规guid,索引使用guid的最后一个字节进行排序?由于它是随机的,它会导致很多碎片和页面拆分,因为它经常将数据移动到另一个页面以插入新数据?

顺序guid正弦它是顺序的,它会导致很少的页面拆分和碎片?

我的理解是否正确?

如果有人能够在这个问题上有更多的亮点,我会非常感激.

谢谢

编辑:

顺序guid = NEWSEQUENTIALID(),

常规guid = NEWID()

Jus*_*tin 9

你在问题中已经说了很多.

使用顺序GUID /主键,新行将在表的末尾添加在一起,这使得SQL服务器很容易.相比之下,随机主键意味着可以在表中的任何位置插入新记录 - 表的最后一页在缓存中的可能性很大(如果这是所有读取的位置),但是表中间的随机页面位于缓存中相当低,这意味着需要额外的IO.

最重要的是,当将行插入表格的中间时,可能没有足够的空间来插入额外的行.如果是这种情况,则SQL服务器需要执行额外的昂贵IO操作以便为记录创建空间 - 避免这种情况的唯一方法是在数据之间分散间隙以允许插入额外的记录(称为填充因子),这本身会导致性能问题,因为数据分布在更多页面上,因此访问整个表需要更多IO.