我需要从旧SQL Server数据库加载数据,该数据库使用数字主键到具有不同模式的新数据库中,该模式使用顺序Guids作为主键。在新系统中,顺序Guids由应用程序生成 - 它使用不支持NEWSEQUENTIALID()
的Azure SQL数据库。
出于性能原因以及我需要使用SQL脚本进行大量数据重组(即将数据直接加载到SQL而不是通过应用程序),我计划为每个旧表添加一个新的Id列对于Ids并在插入新模式之前填充每个遗留表中的ID
我发现this有助于提供此SQL以生成唯一的顺序ID,我可以使用它来生成新的ID
SELECT
CAST(CAST(NEWID() AS BINARY(10)) + CAST(GETDATE() AS BINARY(6)) AS UNIQUEIDENTIFIER)
UPDATE sometable
SET Id = CAST(CAST(NEWID() AS BINARY(10)) + CAST(GETDATE() AS BINARY(6)) AS UNIQUEIDENTIFIER)
但我很困惑,为什么id的顺序部分在Guid的末尾 - 会导致索引碎片?
将SQL更改为此并且在开始时将id的顺序部分更好吗?
CAST(CAST(GETDATE() AS BINARY(6)) + CAST(NEWID() AS BINARY(10)) AS UNIQUEIDENTIFIER)
提前感谢任何有关哪个更好的见解