MSSQL2005-由嵌套失误感受到的强大智能优化功能
在统计一组数据时用到了子查询(子查询用到了count,父查询用了sum)
后语句优化为无子查询
但是跟踪两次的执行计划和IO统计,发现
1、有子查询时扫描计数和逻辑读取远高于无子查询的语句
2、无子查询语句反而多了排序步骤
原来含子查询的语句写错了,错成什么样了呢?
外面的sum求和对象弄错了,导致的结果就是主语句的查询字段没有一个用到子查询中的count结果
好吧,记录到这里有些明白了,好像又有点迷糊
为什么含子查询的语句性能反而更差,是因为count没有被主查询的select使用所以没有被执行吗?
如果是的话为什么group by 的顺序会低于select呢?
如果不是的话为什么子语句都使用group by和聚合函数的性能反而比单语句要好呢?
附:
SET STATISTICS IO ON
SET STATISTICS TIME ON
DECLARE @startDate DATETIME,@endDate DATETIME
SET @startDate = '2015-04-01'
SET @endDate = '2015-05-01'
select staffid,staffname,userid,storename,name,convert(varchar(10),initTime,120) date,
SUM(CASE WHEN name='a' THEN 1 ELSE 0 END) a,
SUM(CASE WHEN name='b' THEN 1 ELSE 0 END) b,
SUM(CASE WHEN name='c' THEN 1 ELSE 0 END) c,
SUM(CASE WHEN name='d' THEN 1 ELSE 0 END) d
from V_001 where initTime between @startDate and @endDate group by staffid,staffname,userid,storename,name,convert(varchar(10),initTime,120)
RETURN;
select
staffid,staffname,userid,storename,date,
SUM(CASE WHEN name='a' THEN 1 ELSE 0 END) a,
SUM(CASE WHEN name='b' THEN 1 ELSE 0 END) b,
SUM(CASE WHEN name='c' THEN 1 ELSE 0 END) c,
SUM(CASE WHEN name='d' THEN 1 ELSE 0 END) d
from
(
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)
) as tmp GROUP BY staffid,staffname,userid,storename,date
MSSQL2005-由嵌套失误感受到的强大智能优化功能的更多相关文章
- 让你的MyEclipse像Visual Studio 2008一样拥有强大功能智能感知功能
Windows→Preferences→Java→Editor→Content Assist 我们看到其中的AutoActivation Delay默认值为200(单位是毫秒)也就是说在打“.”之后停 ...
- jQuery Validate 插件为表单提供了强大的验证功能
之前项目开发中,表单校验用的jQuery Validate 插件,这个插件为表单提供了强大的验证功能,让客户端表单验证变得更简单,同时提供了大量的定制选项,满足应用程序各种需求.该插件捆绑了一套有用的 ...
- php图像处理(thinkphp框架有相对强大的图像处理功能)
php图像处理(thinkphp框架有相对强大的图像处理功能) 一.总结 1.php处理图像:php处理图像需要安装外库(gd库) 2.gd库函数可以非常完美的操作图像:安装好库之后,这个库里面的函数 ...
- 借助Mac自带的强大的搜索功能,如何快速搜索打开Tuxera Disk Manager
现在很多小伙伴们在遇到Mac读写NTFS格式硬盘问题的时候,都会选择使用Tuxera NTFS这个磁盘读写工具.因为这款读写工具不仅可以帮助我们进行读写工作,还具有一个磁盘管理工具Disk Manag ...
- 我的Go gRPC之旅、01 初识gRPC,感受gRPC的强大魅力
微服务架构 微服务是一种开发软件的架构和组织方法,其中软件由通过明确定义的API 进行通信的小型独立服务组成. 这些服务由各个小型独立团队负责. 微服务架构使应用程序更易于扩展和更快地开发,从而加速创 ...
- Elasticsearch强大的聚合功能Facet
在常规数据库中,我们都知道有一个sql就是group,分组.如果主表只有对应的一个列记录的分组的ID,那么还好统计,比如说每本书book表,有一个分类catId,记录是属于哪一类的书,那么直接按照ca ...
- Django之强大的Form功能
转载: http://www.cnblogs.com/0820-zq/p/5807980.html Form Form的验证思路 前端:form表单 后台:创建form类,当请求到来时,先匹配,匹配出 ...
- 【Atom】在一个中/大型项目中,那些好用而强大的atom功能
作为一个学生党,一开始使用atom时候并没有意识到atom一些小功能的巨大作用,直到自己实习参与了项目,才知道这些功能在一个项目中是能极大提高工作效率的开发利器 下面是一位不愿意透露其姓名的彭 ...
- 【零售小程序】—— webview嵌套web端项目(原生开发支付功能)
index → index.wxml 套webwiew // url 活动url bindmessage 接收信息 <web-view src='{{url}}' bindmessage='m ...
随机推荐
- 18B20驱动小经验
在写命令时P14拉高在最后 在读命令时P14在拉低后拉高
- 关于javaweb项目红叉报错可但项目可以正常运行的解决办法
有时候导入的项目工程,文件夹左下角永远有一个红叉,但是由于不影响程序运行,所以之前一直忽略了,但是强迫症患者表示不解决巨蓝瘦,网上有些方法没有讲清楚,所以今天做了个总结来教大家如何详细解 ...
- git忽略对已入库文件的修改
项目开发过程中,会遇到本地配置文件每个开发人员不同的情况,但如果遇到类似数据库配置这种最终需要加入 git 版本控制的配置,则会陷入两难境地.要么不跟踪,要么有人提交后其他人同步下来必须手动修改,非常 ...
- hibernate 一对多关系中的孤儿属性
@OneToMany(targetEntity = BenefitType.class, mappedBy = "sitePerson",cascade = CascadeType ...
- ExtJs常用功能
1.判断内容是否修改 1) var cgrid = query_panel.cgrid; var v = cgrid.getValues(); //console.log(v); if (v != & ...
- 学习笔记71—Python 报错处理集
****************************************************** 如有谬误,请联系指正.转载请注明出处. 联系方式: e-mail: heyi9069@gm ...
- Disable access to Windows Update
Disable access to Windows Update If this policy setting is enabled, all Windows Update features are ...
- nginx的前世今生
Nginx最初的设计是称为一个http服务器,一个能够解决C10K问题的http服务器. 那么问题来了,什么是C10K呢?C10K问题即(单机10万个并发链接问题),这个概念最早是由Dan Kegel ...
- Linux下的crontab定时执行任务命令详解(参考:https://www.cnblogs.com/longjshz/p/5779215.html)
在Linux中,周期执行的任务一般由cron这个守护进程来处理[ps -ef | grep cron].cron读取一个或多个配置文件,这些配置文件中包含了命令行以及调用时间. cron的配置文件成为 ...
- java中,字符串和集合判断是否为空
字符串: 集合: 不为空