zoukankan      html  css  js  c++  java
  • MSSQL2005-由嵌套失误感受到的强大智能优化功能

    在统计一组数据时用到了子查询(子查询用到了count,父查询用了sum)

    后语句优化为无子查询

    但是跟踪两次的执行计划IO统计,发现

    1、有子查询时扫描计数逻辑读取远高于无子查询的语句

    2、无子查询语句反而多了排序步骤

    原来含子查询的语句写错了,错成什么样了呢?

    外面的sum求和对象弄错了,导致的结果就是主语句的查询字段没有一个用到子查询中的count结果

    好吧,记录到这里有些明白了,好像又有点迷糊

    为什么含子查询的语句性能反而更差,是因为count没有被主查询的select使用所以没有被执行吗?

    如果是的话为什么group by 的顺序会低于select呢?

    如果不是的话为什么子语句都使用group by和聚合函数的性能反而比单语句要好呢?

    附:

     1 SET STATISTICS IO ON
     2 SET STATISTICS TIME ON
     3 DECLARE @startDate DATETIME,@endDate DATETIME
     4 SET @startDate = '2015-04-01'
     5 SET @endDate = '2015-05-01'
     6 select staffid,staffname,userid,storename,name,convert(varchar(10),initTime,120) date,
     7     SUM(CASE WHEN name='a' THEN 1 ELSE 0 END) a,
     8     SUM(CASE WHEN name='b' THEN 1 ELSE 0 END) b,
     9     SUM(CASE WHEN name='c' THEN 1 ELSE 0 END) c,
    10     SUM(CASE WHEN name='d' THEN 1 ELSE 0 END) d
    11 from V_001 where initTime between @startDate and @endDate group by staffid,staffname,userid,storename,name,convert(varchar(10),initTime,120)
    12 RETURN;
    13 select 
    14     staffid,staffname,userid,storename,date,
    15     SUM(CASE WHEN name='a' THEN 1 ELSE 0 END) a,
    16     SUM(CASE WHEN name='b' THEN 1 ELSE 0 END) b,
    17     SUM(CASE WHEN name='c' THEN 1 ELSE 0 END) c,
    18     SUM(CASE WHEN name='d' THEN 1 ELSE 0 END) d
    19             from
    20             (
    21             select staffid,staffname,userid,storename,name,convert(varchar(10),initTime,120) date,count(1) c from V_001 where initTime between @startDate and @endDate group by staffid,staffname,userid,storename,name,convert(varchar(10),initTime,120)
    22             ) as tmp GROUP BY staffid,staffname,userid,storename,date
  • 相关阅读:
    菜鸡的Java笔记 第二十八
    菜鸡的Java笔记 第二十七
    菜鸡的Java笔记 第二十六
    菜鸡的Java笔记 第二十五 wrapperClass 包装类
    bzoj3238 [Ahoi2013]差异
    bzoj4516 [Sdoi2016]生成魔咒
    bzoj3998 [TJOI2015]弦论
    bzoj1965 [Ahoi2005]洗牌
    bzoj4896 [Thu Summer Camp2016]补退选
    bzoj5055 膜法师
  • 原文地址:https://www.cnblogs.com/mouyuan/p/4527609.html
Copyright © 2011-2022 走看看