当前位置: 代码迷 >> Sql Server >> 优化查询解决方法
  详细解决方案

优化查询解决方法

热度:73   发布时间:2016-04-24 09:56:02.0
优化查询
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'

------解决思路----------------------
语句没什么可优化的,主要看条件列有没有建适合的索引,看执行计划是不是有表扫描。建上索引+其它只能在硬件上升级提升。结果集数据量大时可考虑分页
  相关解决方案