切换到顺序(梳状)guids - 现有数据怎么样?

Eyv*_*ind 6 sql-server guid sequential

我们有一个包含500多个表的数据库,其中几乎所有表都有一个数据类型为guid(uniqueidentifier)的聚簇PK.

我们正在测试从通过.NET Guid.NewGuid()方法生成的"正常""随机"guid到通过NHibernate guid.comb算法生成的顺序guid的转换.这看起来效果很好,但是那些已经拥有数百万行"随机"主键值的客户呢?

  • 他们是否会受益于从现在开始生成的新ID将是连续的?
  • 可以/应该对他们现有的数据做些什么?

在此先感谢您的任何指示.

Jam*_*ate 0

你可以这样做,但我不确定你是否愿意这样做。我没有看到使用顺序 guid 的任何好处,事实上,不建议使用 guid 作为主键,除非涉及分布式/复制原因。您使用聚集索引吗?

话虽如此,如果您继续,我建议首先加载包含算法中的值的表。

您将会遇到外键的麻烦。您将需要在上述表中关联新旧 guid,删除外键,执​​行事务更新,然后重新应用外键。

我认为不值得这么麻烦,除非您完全放弃指南而采用基于整数的系统。

  • 使用 GUID 作为主键有很多优点,绝对不是“不推荐”。确实不建议将其用作聚集键,因为它可能会导致不良碎片,并且在每个相关的非聚集索引中使用大量空间。 (3认同)