<%--兼容IE7 必须放在 head 的第一行--%>
独上高楼网站
  • 如何提高增加包含大量记录的表的主键字段的效率
  • 如何提高增加包含大量记录的表的主键字段的效率

    LazyBee

    1 问题的提出:

    在给客户升级数据库系统时,由于报表的需要,系统中每一个表都需要有主键字段。系统审计表自然也有这个要求需要增加一个identify的字段,但这个表中有2000多万条记录,使用以下SQLl语句:alter table erAuditEventTime add EventTime_ID int IDENTITY primary key clustered来增加时需要4个多小时。客户要求我们对此进行提速。

    2 抛砖--解决过程

    问题出来之后,我第一时间上google去狂搜了一番,可是没有一条是关于对增加主键提速的。都是说建表增加主键提高效率的。这可怎么办刚开始我以为是日志增长过快的原因,因为我在测试数据库上执行此语句时发现数据库日志文件在以“光速”狂飙,一段时间下来就长到十几个G,于是将数据库的恢复模式改成Simple(简单),效率还是没有多大改善,于是认为会不会是锁的问题呢,但是由于SQL Server会根据情况自动将锁升级的,应该没有问题,不管怎么样还是给加上了with nocheck选项。好像依然没戏,不知什么时候“灵光”一现,我能不能采用拷贝策略呢,不管三七二十一先试试再说,于是将上面的语句改写成下面的方式:

    3826秒。欣喜……

     1--Rename table
     2exec sp_rename 'erAuditEventTime','zxg_erAuditEventTime'
     3go
     4--Copy table schema
     5select top 0 * into erAuditEventTime from zxg_erAuditEventTime 
     6go
     7--Add identify field
     8alter table erAuditEventTime 
     9add EventTime_ID int IDENTITY primary key clustered
    10go
    11--Copy data
    12insert into erAuditEventTime select * from zxg_erAuditEventTime 
    13
    • 与本文主题相关的文章