现有一个报表 需要从存储过程中获取数据,但速度比较慢。查看执行计划后 发现是存储过程中有一个语句是导致报表查询慢的主要原因
select c.fitemid,c.FNumber 物料编号, c.FName 物料名称,isnull(c.FModel,'''') 规格型号
,isnull(d.FName,'''') 单位,isnull(a.FBatchNo,'''') fbatchno,b.fname,a.fqty,
isnull((select top 1 b1.FAuxPrice from ICStockBill a1
inner join ICStockBillEntry b1 on a1.FInterID=b1.FInterID
where FTranType in(1,2,5,10,40) and a1.FCheckerID>0 and b1.fitemid=a.fitemid and b1.fbatchno=a.fbatchno
order by a1.fcheckdate desc),0) 单价
from ICInventory a inner join t_Stock b on a.FStockID=b.FItemID
inner join t_ICItem c on a.FItemID=c.FItemID
inner join t_MeasureUnit d on c.FStoreUnitID=d.FMeasureUnitID
发现是子查询的问题,可否能修改一下
具体消耗如下
(34358 行受影响)
表 'ICStockBill'。扫描计数 930615,逻辑读取 5586813 次,物理读取 26614 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'ICStockBillEntry'。扫描计数 33937,逻辑读取 106586 次,物理读取 3579 次,预读 1184 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'ICInventory'。扫描计数 1,逻辑读取 462 次,物理读取 3 次,预读 458 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 't_ICItemBase'。扫描计数 1,逻辑读取 803 次,物理读取 3 次,预读 800 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 't_ICItemCore'。扫描计数 1,逻辑读取 1199 次,物理读取 3 次,预读 1197 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 't_MeasureUnit'。扫描计数 1,逻辑读取 5 次,物理读取 1 次,预读 3 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 't_Stock'。扫描计数 1,逻辑读取 2 次,物理读取 1 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次