求优化1
--Scanning 表现在有200万数据,每次插入大概8-10万条,每天插入一次,现在速度太慢了,要8分钟
insert into Scanning select JiaohNO,HangNO,Barcodes,HostNO,BatchNO,Sku,SkuName,CkDate,CkType,ShouDFName,Ckqty,null,CkUser,null,CCUser,null,Types from TEScanning 
where not exists(select 1 from Scanning where Scanning.JiaohNO=TEScanning.JiaohNO) and CkType <>'B21'
--求优化2  查询一个月的数据,150万条数据,查询2分钟,怎么做索引!
select row_number()over(order by getdate()) as id,convert(char(10),CkDate,20),CCName,round(SUM(CkVolume),2),round(SUM(CkVolume* PerPrice.jsprice),2) from Scanning,PerPrice 
where Scanning.Types=PerPrice.jstype and PerPrice.jsname='仓务工' and CkDate BETWEEN '2012-09-01 9:27:10' and '2012-10-01 9:27:10' group by convert(char(10),CkDate,20),CCName order by CCName,convert(char(10),CkDate,20)

解决方案 »

  1.   

    优化2:
    Scanning.Types=PerPrice.jstype
    这两个字段聚集索引下, CkDate非聚集索引下
      

  2.   

    优化1:
    Scanning.JiaohNO=TEScanning.JiaohNO 这两个字段聚集索引下,cktype 非聚集索引下
      

  3.   

    TEScanning  此表数据量多少?
      

  4.   

    1。插入前可以把SCANNING表非聚集索引禁用。后面再启用。分批插入。
    2.给计划吧。
      

  5.   

    就是先count 一下总数然后insert 一次 5000 到2000
    然后waitfor 个十秒 然后在继续执行下一次插入避免产生太大的事务日志 才是关键。
      

  6.   

    第二个
    ORDER BY CCName , CONVERT(CHAR(10) , CkDate , 20)改成
    ORDER BY CCName , CkDate 然后这两个列上索引一下看看效果。
      

  7.   

    看不全图的,请在下面两个地址看
    http://img.my.csdn.net/uploads/201210/25/1351154269_9292.jpg
    http://img.my.csdn.net/uploads/201210/25/1351154269_8738.jpg
      

  8.   

    TESTSCANNING是堆表。建立聚集键。。如果关联条件有索引的话。SCANNING也只是查找。。1。建立聚集键
    2.(SCANNING关联条件索引。)
      

  9.   

    真是立竿见影啊,向sql班的大牛们学习