在SQL Server相关表中将主键从GUID更改为BigInt的方法

Tom*_*lle 6 sql-server indexing performance guid bigint

我有两个表,其中10-20万行具有GUID主键,并且通过外键与12个表相关联.基表每个都有10-20个索引.

我们正在从GUID迁移到BigInt主键.我想知道是否有人对方法有任何建议.现在这是我正在思考的方法:

  1. 删除所有涉及的表上的所有索引和fkeys.
  2. 为每个表添加"NewPrimaryKey"列
  3. 在两个基表上创建密钥标识
  4. 脚本数据更改"更新表x,设置NewPrimaryKey = y,其中OldPrimaryKey = z
  5. 将原始主键重命名为'oldprimarykey'
  6. 将'NewPrimaryKey'列重命名为'PrimaryKey'
  7. 编写所有索引和fkeys的脚本

这看起来像是一个好方法吗?有没有人知道有助于此的工具或脚本?

TD:根据其他信息编辑.请参阅此博客文章,该文章介绍GUID为主要时的方法:http: //www.sqlmag.com/blogs/sql-server-questions-answered/sql-server-questions-answered/tabid/1977/entryid/12749 /Default.aspx

Phi*_*ley 0

听起来这个策略肯定会起作用——删除约束,从它们下面更改列(类型更改,名称保持不变),然后重新创建约束是相当优雅的。

最终目标是删除 GUID 列吗?如果是这样,除非复制或重建表,否则您实际上不会回收空间,因此可能需要进行以下调整:

...
4.编写数据更改脚本“update table x, set NewPrimaryKey = y where OldPrimaryKey = z
5.将原始主键删除
为“oldprimarykey” 6.将“NewPrimaryKey”列重命名为“PrimaryKey”
7.编写回所有索引的脚本和 fkeys(构建聚集索引“重建”表)
8.对于所有没有聚集索引的表,执行一些操作以确保它们得到重建并回收其空间(例如构建然后删除聚集索引)

不用说,在生产环境中运行之前,请在开发环境中对其进行测试!