sql语句查询条件改变速度变慢?

jackluo1981 2016-09-03 12:02:21
查询语句如下
SELECT a.S_BarCode, V_QAFilmdata.k3code, a.S_GoodsName, V_QAFilmdata.sdate, a.GoodsLotNO AS LotNO, CASE WHEN LEFT(S_GoodsCode, 3)
= '20.' THEN S_goodsMFGdate END AS S_goodsindate, V_QAFilmdata.class, V_QAFilmdata.LV, V_QAFilmdata.Expdayqty, V_QAFilmdata.zhCheck AS ck,
V_QAFilmdata.mark, a.S_GoodsUnitName AS UnitName, V_QAFilmdata.FaceCheck, V_QAFilmdata.txCheck, V_QAFilmdata.QaDataIntName, a.GoodsTypeID, a.S_NV,
V_QAFilmdata.QADataZbit
FROM (SELECT dbo.V_QAFilmdata_Auto.k3code, dbo.V_QAFilmdata_Auto.sdate AS sdate, dbo.V_QAFilmdata_Auto.goodsname,
CAST(dbo.V_QAFilmdata_Auto.GoodsSpec AS varchar) AS goodsspec, ISNULL(dbo.V_QAFilmdata_Auto.LotNo, dbo.V_QAFilmdata_Auto.lot) AS LotNo,
dbo.V_QAFilmdata_Auto.class, dbo.V_QAFilmdata_Auto.LV, QAFilmBasic.QAFilmExpQty AS Expdayqty, dbo.V_QAFilmdata_Auto.FaceCheck,
dbo.V_QAFilmdata_Auto.txCheck, dbo.V_QAFilmdata_Auto.zhCheck, dbo.V_QAFilmdata_Auto.mark, dbo.V_QAFilmdata_Auto.QaDataIntName,
dbo.V_QAFilmdata_Auto.QADataZbit
FROM dbo.V_QAFilmdata_Auto INNER JOIN
(SELECT QAFilmName, QAFilmExpQty
FROM dbo.QAFilmBasic_New
WHERE (QAFilmint = 1)
UNION
SELECT QAFilmName, QAFilmExpQty
FROM dbo.QAFilmBasic_New
WHERE (QAFilmint = 2) AND (NOT EXISTS
(SELECT QAFilmName, QAFilmint, QAFilm000, QAFilm011, QAFilm012, QAFilm013, QAFilm020, QAFilm030, QAFilm040, QAFilm051,
QAFilm052, QAFilm053, QAFilm061, QAFilm062, QAFilm063, QAFilm070, QAFilm081, QAFilm082, QAFilm083, QAFilm090,
QAFilm101, QAFilm102, QAFilm103, QAFilm111, QAFilm112, QAFilm113, QAFilm120, QAFilm130, QAFilm141, QAFilm142,
QAFilm143, QAFilm151, QAFilm152, QAFilm153, QAFilm161, QAFilm162, QAFilm163, QAFilm171, QAFilm172, QAFilm173,
QAFilm181, QAFilm182, QAFilm183, QAFilm191, QAFilm192, QAFilm193, QAFilm201, QAFilm202, QAFilm203, QAFilmBit,
QAFilmSysDate, QAFilmUse, QAFilmBitUse, QAFilmBitDate, QAFilmExpQty, QAFilmRemark
FROM dbo.QAFilmBasic_New AS a
WHERE (QAFilmint = 1) AND (QAFilmName = dbo.QAFilmBasic_New.QAFilmName)))) AS QAFilmBasic ON
dbo.V_QAFilmdata_Auto.goodsname = QAFilmBasic.QAFilmName) AS V_QAFilmdata
INNER JOIN
(SELECT dbo.SA_MaterielBar.S_BarCode, dbo.SA_MaterielBar.S_GoodsCode, dbo.SA_MaterielBar.S_GoodsMFGDate, dbo.SA_MaterielBar.S_GoodsinDate,
dbo.SA_MaterielBar.S_GoodsLotNO AS goodsLot, dbo.SA_MaterielBar.S_GoodsLot AS GoodsLotNO, dbo.SA_MaterielBar.S_GoodsQty AS S_Qty,
dbo.SA_MaterielBar.S_GoodsUnitName, dbo.SA_MaterielBar.S_GoodsName, dbo.SA_MaterielBar.S_GoodsTypeID AS GoodsTypeID,
dbo.SA_MaterielBar.S_NV
FROM dbo.SA_MaterielBar INNER JOIN
dbo.SA_goodslist ON dbo.SA_MaterielBar.S_BarCode = dbo.SA_goodslist.S_GListBarCode
WHERE (dbo.SA_MaterielBar.S_GoodsTypeID = 117) AND (dbo.SA_MaterielBar.S_GoodsDel = 0) AND (dbo.SA_goodslist.S_GlistFlag = 2) AND
(dbo.SA_goodslist.S_GListQty > 0) AND (dbo.SA_MaterielBar.S_GoodsMFGDate >= GETDATE() - 1000)) AS a ON
V_QAFilmdata.LotNo = a.GoodsLotNO and V_QAFilmdata.k3code = a.S_GoodsCode AND V_QAFilmdata.sdate= a.S_GoodsMFGDate
...全文
910 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackluo1981 2016-09-22
  • 打赏
  • 举报
回复
请大家分析分析原因
jackluo1981 2016-09-08
  • 打赏
  • 举报
回复
如果把最后一个条件去掉,就是去掉V_QAFilmdata.sdate= a.S_GoodsMFGDate后,执行变快了 是什么原因会导致这个结果呢? 根据执行结果来看,变化最大的是'QAFilmData'的逻辑读取次数,一次是458451 次,一次是63 次,
jackluo1981 2016-09-03
  • 打赏
  • 举报
回复
上面的语句执行结果如下: (7277 行受影响) 表 'QAFilmData'。扫描计数 7277,逻辑读取 458451 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 表 'QAFilmBasic_New'。扫描计数 3946,逻辑读取 37004 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 表 'QAFilmFaced'。扫描计数 1,逻辑读取 2227 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 表 'QAFilmFace'。扫描计数 1,逻辑读取 107 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 表 'SA_MaterielBar'。扫描计数 9804,逻辑读取 54099 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 表 'SA_goodslist'。扫描计数 1,逻辑读取 54 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 SQL Server 执行时间: CPU 时间 = 8689 毫秒,占用时间 = 11208 毫秒。 如果把最后一个条件去掉,就是去掉V_QAFilmdata.sdate= a.S_GoodsMFGDate后,执行变快了,结果如下: (7308 行受影响) 表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 表 'QAFilmData'。扫描计数 1,逻辑读取 63 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 表 'QAFilmBasic_New'。扫描计数 1895,逻辑读取 17154 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 表 'QAFilmFaced'。扫描计数 1,逻辑读取 2227 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 表 'QAFilmFace'。扫描计数 1,逻辑读取 107 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 表 'SA_MaterielBar'。扫描计数 9803,逻辑读取 54093 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 表 'SA_goodslist'。扫描计数 1,逻辑读取 53 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 SQL Server 执行时间: CPU 时间 = 624 毫秒,占用时间 = 1673 毫秒。 --------------------------------------------------------------------- 根据执行结果来看,变化最大的是'QAFilmData'的逻辑读取次数,一次是458451 次,一次是63 次, 请问各位大神,这是为什么啊?怎么优化呢?
中国风 2016-09-03
  • 打赏
  • 举报
回复
如果是存储过程,把过滤条件的表生成临时表再关联 嵌套表比如: e.g.

( SELECT QAFilmName ,
                                        QAFilmExpQty
                                 FROM   dbo.QAFilmBasic_New
                                 WHERE  ( QAFilmint = 1 )
                                 UNION
                                 SELECT QAFilmName ,
                                        QAFilmExpQty
                                 FROM   dbo.QAFilmBasic_New
                                 WHERE  ( QAFilmint = 2 )
                                        AND ( NOT EXISTS ( SELECT
                                                              QAFilmName ,
                                                              QAFilmint ,
                                                              QAFilm000 ,
                                                              QAFilm011 ,
                                                              QAFilm012 ,
                                                              QAFilm013 ,
                                                              QAFilm020 ,
                                                              QAFilm030 ,
                                                              QAFilm040 ,
                                                              QAFilm051 ,
                                                              QAFilm052 ,
                                                              QAFilm053 ,
                                                              QAFilm061 ,
                                                              QAFilm062 ,
                                                              QAFilm063 ,
                                                              QAFilm070 ,
                                                              QAFilm081 ,
                                                              QAFilm082 ,
                                                              QAFilm083 ,
                                                              QAFilm090 ,
                                                              QAFilm101 ,
                                                              QAFilm102 ,
                                                              QAFilm103 ,
                                                              QAFilm111 ,
                                                              QAFilm112 ,
                                                              QAFilm113 ,
                                                              QAFilm120 ,
                                                              QAFilm130 ,
                                                              QAFilm141 ,
                                                              QAFilm142 ,
                                                              QAFilm143 ,
                                                              QAFilm151 ,
                                                              QAFilm152 ,
                                                              QAFilm153 ,
                                                              QAFilm161 ,
                                                              QAFilm162 ,
                                                              QAFilm163 ,
                                                              QAFilm171 ,
                                                              QAFilm172 ,
                                                              QAFilm173 ,
                                                              QAFilm181 ,
                                                              QAFilm182 ,
                                                              QAFilm183 ,
                                                              QAFilm191 ,
                                                              QAFilm192 ,
                                                              QAFilm193 ,
                                                              QAFilm201 ,
                                                              QAFilm202 ,
                                                              QAFilm203 ,
                                                              QAFilmBit ,
                                                              QAFilmSysDate ,
                                                              QAFilmUse ,
                                                              QAFilmBitUse ,
                                                              QAFilmBitDate ,
                                                              QAFilmExpQty ,
                                                              QAFilmRemark
                                                           FROM
                                                              dbo.QAFilmBasic_New
                                                              AS a
                                                           WHERE
                                                              ( QAFilmint = 1 )
                                                              AND ( QAFilmName = dbo.QAFilmBasic_New.QAFilmName ) )
                                            )
                               )

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧