SQL Server - 为现有数据生成顺序指南

时间:2016-04-21 17:11:03

标签: sql sql-server database azure

我需要从旧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)

提前感谢任何有关哪个更好的见解

0 个答案:

没有答案