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分以上如何少,求高手指教啊
[解决办法]
然后一次性执行:
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语句);
[解决办法]
用索引或者建立临时表应该会快些