Foxtable(狐表)用户栏目专家坐堂 → 为什么数据少了累计查询速度还会更慢?


  共有2087人关注过本帖树形打印复制链接

主题:为什么数据少了累计查询速度还会更慢?

帅哥哟,离线,有人找我吗?
happyft
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1907 积分:16954 威望:0 精华:0 注册:2014/7/29 19:09:00
为什么数据少了累计查询速度还会更慢?  发帖心情 Post By:2019/12/14 16:49:00 [只看该作者]

有两个表要模糊连接查询,为了提高速度,先将第一个表汇总后存储临时表,这样数据量从2万行变成了1千多行, 要连接的那个表#temp3只有4千行,不变
SELECT  a.*
INTO    #temp2
FROM    ( SELECT    a.子件 ,
                    a.品名 ,
                    a.到期日 ,
                    SUM(a.毛需求量) AS 毛需求量
          FROM      订单 a
          WHERE     订单状态 = '新增'  这里已经按条件筛选了
          GROUP BY  子件 ,
                    品名 ,
                    a.到期日
        ) a

--用上面临时表为左表开始累计查询(速度很慢)
SELECT  a.子件 ,
        a.品名 ,
        a.到期日 AS 交货日期 ,
        a.毛需求量 ,
        c预计入库 = ( SELECT    SUM(预计入库)
                  FROM      #temp3 b
                  WHERE     CHARINDEX(a.子件, b.规格) > 0
                            AND b.交货日期 <= a.到期日
                )
FROM    #temp2 a

--从原表开始累计查询(速度快)
SELECT  a.子件 ,
        a.品名 ,
        a.到期日 AS 交货日期 ,
        a.毛需求量 ,
        c预计入库 = ( SELECT    SUM(预计入库)
                  FROM      #temp3 b
                  WHERE     CHARINDEX(a.子件, b.规格) > 0
                            AND b.交货日期 <= a.到期日
                )
FROM    订单 a
WHERE   a.订单状态 = '新增'
结果是下面这个用原始表有近2万行数据做为左表的只用了2表,但上面那个左表只有1千多行的却用了13秒
实在不解,特意请教,
谢谢!

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106209 积分:540168 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/12/14 17:09:00 [只看该作者]

具体道理我也不懂,如果结果一样,哪个快就用哪个。

估计是临时表是没有索引的,全部都是全表扫描查询,而物理表是支持索引查询的

 回到顶部
帅哥哟,离线,有人找我吗?
HappyFt
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1907 积分:16954 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2019/12/14 17:11:00 [只看该作者]

都没有索引啊,我还专门增加了一个物理表,将汇总后的临时表数据插入到那个物料表还专门加了索引结果还是一样慢,好吧,不管它了,谢谢!

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106209 积分:540168 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/12/14 17:29:00 [只看该作者]

可以自己分析一下查询计划,看慢在什么地方:https://www.cnblogs.com/knowledgesea/p/5005163.html

 回到顶部