首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

sqlserver怎么提高執行效率﹖

2013-09-05 
sqlserver如何提高執行效率﹖ while not OSRPTDM.TblByPJPODue.Eof do//這里大概循環100次beginCloseSQL.C

sqlserver如何提高執行效率﹖
 while not OSRPTDM.TblByPJPODue.Eof do//這里大概循環100次
    begin
      Close;
      SQL.Clear;
      SQL.Add(' Select PONO,PartNo,Sum(Qty) as RecvQty ');
      SQL.Add(' from wis_admin.GRItem where ');
      SQL.Add(' GRNo in (select GRNo from wis_admin.GRN ');
      SQL.Add(' where    RDate < :RDate and Posted=''Y'' )');
      SQL.Add(' and PONo = :PONo and PartNo = :PartNo  ');
      SQL.Add(' Group by PONO,PartNo');
      ParamByName('PONo').asstring:=OSRPTDM.TblByPJPODue.FieldByName('PONo').AsString;
      ParamByName('PartNo').asstring:=OSRPTDM.TblByPJPODue.FieldByName('PartNo').AsString;
      ParamByName('RDate').asDateTime:=DateTimePicker2.Date;
      if not prepared then prepare;
      Open;
表wis_admin.GRItem有221334條記錄﹐表wis_admin.GRN有65271條記錄﹐每次運行等結果要5分鐘以上﹐請問如何減少這個時間,求高手指教啊sqlserver怎么提高執行效率﹖
[解决办法]
然后一次性执行:

select 。。。
from  wis_admin.GRItem a
left join OSRPTDM.TblByPJPODue b on a.PONo = b.PONo and a.PartNo = b.PartNo
where  GRNo in (
select GRNo from wis_admin.GRN where RDate < :RDate and Posted='Y') 
--如果需要进一步优化,可以使用临时表
)
and b.pono is not null

[解决办法]
OSRPTDM.TblByPJPODue不用循环,把这个表的操作写到一个存储过程里面,速度会很快的
[解决办法]
为什么要循环查询100次,真的有必要?
[解决办法]
加好索引应该能快不少吧。
in 改成exists,或是改成内连接。


用临时表有些时候很有效果。
[解决办法]



楼主再把(关于TblByPJPODue的)代码放出一部分.
运行速度慢的可能原因有:
  大量循环语句导致的多次访问数据库;
  sql代码未优化(你放出来的代码中使用in语句会导致索引失效, 最好改成inner join语句);

[解决办法]
用索引或者建立临时表应该会快些

热点排行