- 如何提高增加包含大量记录的表的主键字段的效率
-
如何提高增加包含大量记录的表的主键字段的效率
1 问题的提出:
在给客户升级数据库系统时,由于报表的需要,系统中每一个表都需要有主键字段。系统审计表自然也有这个要求—需要增加一个identify的字段,但这个表中有2000多万条记录,使用以下SQLl语句:alter table erAuditEventTime add EventTime_ID int IDENTITY primary key clustered来增加时需要4个多小时。客户要求我们对此进行提速。
2 抛砖--解决过程
问题出来之后,我第一时间上google去狂搜了一番,可是没有一条是关于对增加主键提速的。都是说建表增加主键提高效率的。这可怎么办刚开始我以为是日志增长过快的原因,因为我在测试数据库上执行此语句时发现数据库日志文件在以“光速”狂飙,一段时间下来就长到十几个G,于是将数据库的恢复模式改成Simple(简单),效率还是没有多大改善,于是认为会不会是锁的问题呢,但是由于SQL Server会根据情况自动将锁升级的,应该没有问题,不管怎么样还是给加上了with nocheck选项。好像依然没戏,不知什么时候“灵光”一现,我能不能采用拷贝策略呢,不管三七二十一先试试再说,于是将上面的语句改写成下面的方式:
38分26秒。欣喜……
1
--Rename table
2
exec sp_rename 'erAuditEventTime','zxg_erAuditEventTime'
3
go
4
--Copy table schema
5
select top 0 * into erAuditEventTime from zxg_erAuditEventTime
6
go
7
--Add identify field
8
alter table erAuditEventTime
9
add EventTime_ID int IDENTITY primary key clustered
10
go
11
--Copy data
12
insert into erAuditEventTime select * from zxg_erAuditEventTime
13- 与本文主题相关的文章
