【问题标题】:Is possible NEWSEQUENTIALID() repeat with NewId()?是否可以用 NewId() 重复 NEWSEQUENTIALID()?
【发布时间】:2020-07-23 14:12:35
【问题描述】:

我以前有一张表,大约有1000W条数据,主键列的数据类型是uniqueidentifier,默认值是Newid()。现在出现性能问题,想把默认值改成NEWSEQUENTIALID()

NEWSEQUENTIALID() 生成的 GUID 是否可以复制之前保存的数据(之前由NewId() 生成)?

【问题讨论】:

  • 请记住,newsequentialid() 创建的值“大于自 Windows 启动以来此函数先前在指定计算机上生成的任何 GUID”。当操作系统重新启动时,您将获得一个新的种子值,该值可能低于之前的值,从而导致索引碎片。见this discussion。此外,它还特别提到了 windows——不确定它在 Linux 上的行为。

标签: sql-server newid newsequentialid


【解决方案1】:

NEWSEQUENTIALID 有效地创建了一个Version 1 UUID

NEWID 创建一个Version 4 UUID

虽然NEWSEQUENTIALID 确实应用了一些byte scrambling,但它确实使版本nybble 保持不变。这意味着NEWSEQUENTIALID 创建的 guid 和 NEWID 之间不会发生冲突。

【讨论】:

    猜你喜欢
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 2010-10-02
    • 1970-01-01
    相关资源
    最近更新 更多