现在有A,B两表,二者结构一样另外有C表, 这三个表中有三个相同的字段MsgId,Status,Errcode现在需要操作的是:将A表中的数据移到B表中,删除相应A表中的数据;同时,根据MsgId,同步更新C表中Status,Errcode这两个字段我现在就是常规做法,如
insert into B(字段。) select top 1000 * from A where id >@laseID //@laseID为每次查询A表的最大ID
delete from A where id<laseID   //删除A表中的记录updata C set Status=@Status where MsgId=@MsgID    //更新c表中Status,Errcode两字段的内容
updata C set Errcode=@Errcode where MsgId=@MsgID  
可是我发现这样的效率不是很高,而且由于还有其他程序对数据库操作,有时候会出现锁表的情况
所以想请教大家有没有办法对上述进行优化
谢谢了

解决方案 »

  1.   

    updata C set Status=@Status ,Errcode=@Errcode where MsgId=@MsgID //更新c表中Status,Errcode两字段的内容这一句可以写一起
      

  2.   

    有时候会出现锁表的情况
    所以想请教大家有没有办法对上述进行优化
    可以考虑为MsgId加索引
      

  3.   

    在所有用户休息的时候进行作业处理.如果一天24小时都有人不断在处理数据,那就象CSDN一样,强行停止所有业务一个小时然后进行升级那样的处理.
      

  4.   

    (1)用>= 代替>(2)有时候会出现锁表的情况-->insert into B(字段。) select top 1000 * from A(NOLOCK) where id >@laseID