我写了一个超复杂的sql语句,目的是把把本地表的新记录插入到远程表,条件是,本地表中有的记录,而远程表中没有的记录才插过去,以personid和name两个字段为依据判断记录是否相同
环境(sql 2005)
问题:现在我的sql语句可以达到要求,但是当远程表的数据越来越大后(30万条) 后面再导就会超慢CPU 100% 左右,而我现在的业务需求常常是远程表30万条本地表4万条左右的记录量,十在是太慢了,而一开始远程表没数据的时候是超快,几需要十几秒.肯请sql高手优化
我的sql代码
INSERT INTO OpenDataSource( 'SQLOLEDB','Database=CQFFSMS;Server=192.168.0.242;UID=sa;pwd=sa;').CQFFSMS.dbo.[JCXZ_0118]
(name,personid,address)
SELECT name,personid,address
FROM [JCXZ_0118] as x WHERE not exists(select top 1 1 from OpenDataSource( 'SQLOLEDB','Database=CQFFSMS;Server=192.168.0.242;UID=sa;pwd=sa;').CQFFSMS.dbo.[JCXZ_0118] as l where x.name = l.name and x.personid = l.personid )

解决方案 »

  1.   

    建个中间表 里面多加个修改日期(每次getdate()) 添加一个trigger 把本地修改的数据和新增的数据都insert进去
    定时更新到远端(按主键)后删除中间表的数据
      

  2.   

    http://community.csdn.net/Expert/topic/5674/5674019.xml?temp=.3949243
      

  3.   

    用触发器 加 传输记录表的方式
    传输录入表 记录新增加的记录和删除、修改过的记录的Key
    然后在传输之前先删除远程表中的删除,修改过的记录,
    再上传每天新加的和修改过的记录