我有两个表,其中10-20万行具有GUID主键,并且有12个表通过外键相关。基表每个都有10-20个索引。
我们正在从GUID迁移到BigInt主键。我想知道是否有人对方法有任何建议。现在这是我正在思考的方法:
这看起来像是一种好方法吗? 有没有人知道有助于此的工具或脚本?
TD:根据其他信息编辑。请参阅此博客文章,该文章介绍GUID为主要时的方法:http://www.sqlmag.com/blogs/sql-server-questions-answered/sql-server-questions-answered/tabid/1977/entryid/12749/Default.aspx
答案 0 :(得分:3)
答案 1 :(得分:0)
肯定听起来这个策略可行 - 删除约束,从列下更改列(类型更改,名称保持不变),然后重新创建约束相当优雅。
目标是最终删除GUID列吗?如果是这样,除非复制或重建表,否则您实际上不会回收空间,因此可能会进行以下调整:
...
4.Script数据更改“更新表x,设置NewPrimaryKey = y,其中OldPrimaryKey = z
5. 将原始主键删除为'oldprimarykey'
6.重命名'NewPrimaryKey'栏目'PrimaryKey'
7.Script返回所有索引和fkeys(构建聚簇索引“rebuilds”表)
8.对于所有没有聚簇索引的表,做一些事情以确保它们被重建并回收它们的空间(这样的构建然后删除聚簇索引)
毋庸置疑,在开始生产之前在开发盒上测试它!
答案 2 :(得分:0)
我还要补充一下:
确保在开始之前有一个好的当前备份。 将服务器更改为以单用户模式运行(首先通知用户中断期)。 您不希望用户在此过程中尝试输入数据。