select sum(JE*SL) as je from vw_sdlsmx where rq BETWEEN '2014-3-1' and '2014-9-17' and VW_SDLSMX.LB='LS' and dm1!='075' and SPDM IN(SELECT SPDM FROM SHANGPIN WHERE BYZD4 IN('000','001'))
这个查询怎么优化
现在查下要5秒多
------解决思路----------------------
除了添加索引外,从语句上最后一句
and SPDM IN(SELECT SPDM FROM SHANGPIN WHERE BYZD4='000'
union all
SELECT SPDM FROM SHANGPIN WHERE BYZD4='001' )
------解决思路----------------------
1.贴你现在查询的执行计划。
2.试试:
SELECT SUM(JE * SL) AS je
FROM ( SELECT je ,
sl
FROM vw_sdlsmx
WHERE rq BETWEEN '2014-3-1' AND '2014-9-17'
AND VW_SDLSMX.LB = 'LS'
) vw_sdlsmx
INNER JOIN ( SELECT SPDM
FROM SHANGPIN
WHERE BYZD4 IN ( '000', '001' )
) SHANGPIN ON vw_sdlsmx.spdm = SHANGPIN.spdm
WHERE vw_sdlsmx.dm1 != '075'
------解决思路----------------------
语句没什么可优化的,主要看条件列有没有建适合的索引,看执行计划是不是有表扫描。建上索引+其它只能在硬件上升级提升。结果集数据量大时可考虑分页