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
  • 相关阅读:
    POJ 1328 Radar Installation
    POJ 1700 Crossing River
    POJ 1700 Crossing River
    poj 3253 Fence Repair (贪心,优先队列)
    poj 3253 Fence Repair (贪心,优先队列)
    poj 3069 Saruman's Army(贪心)
    poj 3069 Saruman's Army(贪心)
    Redis 笔记与总结2 String 类型和 Hash 类型
    数据分析方法有哪些_数据分析方法
    数据分析方法有哪些_数据分析方法
  • 原文地址:https://www.cnblogs.com/mouyuan/p/4527609.html
Copyright © 2011-2022 走看看