insert into mdb..tbnv (counter_sno,in_no,trn_date,curr_no,item_no,account_no,trn_amt)select isnull(counter_sno,true_sno),isnull(in_no,0),'20061206',isnull(curr_no,0),isnull(item_no,0),isnull(account_no,0) from (select * from sqlsrv.tbAc.dbo.tblsz_ht06 where trn_date = '20061206') a right join (select distinct(true_sno) from sqlsrv.tbJD.dbo.tbocrresult where trn_date='20061206'and packfile = '2006120601' and len(true_sno)=12) b on counter_sno = true_sno
其中mdb..tbnv 是用设置远程服务器的Access表,所有字段都不允许为空也没有默认值,sqlsrv.tbAc.dbo.tblsz_ht06和sqlsrv.tbJD.dbo.tbocrresult 都是另外服务器上的SQLServer表,其中记录数在300万左右,现在运行需要大概2分半时间,希望大家帮帮忙看看是否能把时间缩短到1分钟啊,其中表的索引我都已经加了不用考虑了,主要看看这句话什么地方还能优化的,谢谢大家

解决方案 »

  1.   

    一大堆,没仔细看,
    简单的把你的代码改成这种伪代码
    insert into tablename(c_name1,cname2,cname3...cname_N)第一部分
    select c_name1,cname2,cname3...cname_N from   第二部分
    一个由关联查询得到的新结果集合                第三部分但如果不改表结构以及索引这些硬性的东西,单纯依靠从语句的修改来提升性能,那么唯一可以改的就是语句中的第三部分,即关联查询的那一部分,不了解的表,但要改,以就是根据你的表结构看看关联查询部分的性能提升
      

  2.   

    select * 与distinct(true_sno) 优化不了   基本上没有什么可优化的了  300万数据也不少啊!
      

  3.   

    想办法把你的isnull去掉,列上尽量不要用函数
      

  4.   

    isnull是对结果的操作,用函数不会影响速度;
    将select * 换成select 字段列表