二、函数计算部分

--------------------标量聚合--------------------
/*
标量聚合-主要在聚合函数操作中产生
计算标量:根据行中的现有值计算出一个新值
流聚合:在相应排序的流中,计算多组行的汇总值
所有的聚合函数都会有流聚合出现,但是其不会消耗IO,只消耗CPU
除MAX()和MIN()外其他聚合函数都会同时出现标量和聚合两个操作
当列列表只包含聚合函数时,则结果集只具有一个行给出的聚合值,
该值由与WHERE子句相匹配的源行计算得到。
*/
SELECT MAX(Age) FROM dbo.UserInfo
SELECT COUNT(*) FROM dbo.UserInfo

/*
执行以下语句,你会发现对[Id]进行去重由于是主键不会有重复,所以直接
通过流聚合就可以计算出结果,而[Name]字段进行去重的时候会有一个Sort排序的操作,
排序是比较消耗资源的尤其在数据量较大的表中,所以我们可以针对这个进行一下优化
*/
SELECT COUNT(DISTINCT Id) FROM dbo.UserInfo
SELECT COUNT(DISTINCT Name) FROM dbo.UserInfo

/*
为[Name]字段建立一个非聚集索引再执行一下,会发现出现两个流聚合却没有了排序,
这样就节省了排序的开销,标量聚合算法比较简单,适合非重复值的聚合操作,调优时
尽量避免排序的产生,将分组(GROUP BY)字段锁定在索引覆盖范围内
*/
DROP INDEX dbo.UserInfo.Index_UserInfo_Name
CREATE INDEX Index_UserInfo_Name ON dbo.UserInfo(Name)

--------------------散列聚合(哈希匹配)--------------------/*
散列聚合(哈希匹配)-为了解决流聚合的不足,应对大数据的操作而产生的
对于数据量比较大时,SQL Server选择的是哈希匹配。
在内存中建立好散列表后,会按照GROUP BY后面的值作为键,
然后依次处理集合中的每条数据,当键在散列表中不存在时,
向散列表添加条目,当键已经在散列表中存在时,按照规则
聚合函数计算散列表中的值
*/
SELECT Name,COUNT(*) FROM dbo.UserInfo
GROUP BY Name
SELECT [Type],COUNT(*) FROM dbo.UserInfo
GROUP BY [Type]

--------------------排序--------------------/*
排序-资源消耗较高的操作
对于数据量比较小时,执行GROUP BY操作会使用SORT
注意:Sort操作是占用内存的操作,当内存不足时会占用Tempdb
(SQL Server总是会在Sort操作和散列匹配中选择成本最低的)
调优时为排序字段建立索引可以更好的提高查询效率,如果想
按照添加时间倒序,那么Order By Id(Identity)可以达到同样的
结果,而且效率还更高
*/
SELECT * FROM dbo.UserInfo
ORDER BY AddTime
SELECT * FROM dbo.UserInfo
ORDER BY Id

--------------------查看查询IO、时间、内存占用--------------------/*
使用SET STATISTICS IO, TIME还有其他的监控元素可以查看到当前
执行的SQL性能,有针对性的进行调优操作 选中表按Alt+F1可以显示选中表的结构,包括列、主键、索引等
执行SQL语句使用Ctrl+M可以显示当前SQL的执行计划,便于调试
dbo是SQL Server的架构名,默认就是dbo,除非强制将函数等写在其他架构名
下才无法调用
*/
SET STATISTICS IO, TIME ON
SELECT * FROM dbo.UserInfo
SET STATISTICS IO, TIME OFF

学习如何看懂SQL Server执行计划(二)——函数计算篇的更多相关文章

  1. 学习如何看懂SQL Server执行计划(一)——数据查询篇

    一.数据查询部分 1. 看到执行计划有两种方式,对sql语句按Ctrl+L,或按Ctrl+M打开显示执行计划窗口每次执行sql都会显示出相应的执行计划 2. 执行计划的图表是从右向左看的 3. SQL ...

  2. 学习如何看懂SQL Server执行计划——基本知识篇

    一.基本概念 1.数据的读取 页(page)是SQL SERVER可以读写的最小I/O单位.即使只需访问一行,也要把整个页加载到缓存之中,再从缓存中读取数据.物理读取是从磁盘上读取,逻辑读取是从缓存中 ...

  3. 学习如何看懂SQL Server执行计划(三)——连接查询篇

    三.连接查询部分 --------------------嵌套循环-------------------- /* UserInfo表数据少.Coupon表数据多嵌套循环可以理解为就是两层For循环,外 ...

  4. Oracle之SQL优化专题03-如何看懂SQL的执行计划

    专题第一篇<Oracle之SQL优化专题01-查看SQL执行计划的方法>讲到了查看SQL执行计划的方法,并介绍了各种方法的应用场景,那么这一篇就主要介绍下如何看懂SQL的执行计划.毕竟如果 ...

  5. sql server 执行计划(execution plan)介绍

    大纲:目的介绍sql server 中执行计划的大致使用,当遇到查询性能瓶颈时,可以发挥用处,而且带有比较详细的学习文档和计划,阅读者可以按照我计划进行,从而达到对执行计划一个比较系统的学习. 什么是 ...

  6. 怎样看懂Oracle的执行计划

    怎样看懂Oracle的执行计划 一.什么是执行计划 An explain plan is a representation of the access path that is taken when ...

  7. 引用:初探Sql Server 执行计划及Sql查询优化

    原文:引用:初探Sql Server 执行计划及Sql查询优化 初探Sql Server 执行计划及Sql查询优化 收藏 MSSQL优化之————探索MSSQL执行计划 作者:no_mIss 最近总想 ...

  8. SQL Server 执行计划操作符详解(3)——计算标量(Compute Scalar)

    接上文:SQL Server 执行计划操作符详解(2)--串联(Concatenation ) 前言: 前面两篇文章介绍了关于串联(Concatenation)和断言(Assert)操作符,本文介绍第 ...

  9. Sql server 执行计划详解

    序言 本篇主要目的有二: 1.看懂t-sql的执行计划,明白执行计划中的一些常识. 2.能够分析执行计划,找到优化sql性能的思路或方案. 如果你对sql查询优化的理解或常识不是很深入,那么推荐几骗博 ...

随机推荐

  1. 小程序脚本语言WXS,你想要的都在这里了

    WXS脚本语言是 Weixin Script脚本的简称,是JS.JSON.WXML.WXSS之后又一大小程序内部文件类型.截至到目前小程序已经提供了5种文件类型. 解构小程序的几种方式,其中一种方式就 ...

  2. linq 起源

    在说LINQ之前必须先说说几个重要的C#语言特性 一:与LINQ有关的语言特性 1.隐式类型 (1)源起 在隐式类型出现之前, 我们在声明一个变量的时候, 总是要为一个变量指定他的类型 甚至在fore ...

  3. 详解 mpls vpn 的实现

    MPLS VPN的实现 一.实验目的 该实验通过MPLS VPN的数据配置,使学生掌握路由器相关接口的IP地址设置.路由协议的配置以及MPLS VPN的完整的创建过程, 从而加深对IP网络的IP编址. ...

  4. 【★】EIGRP终极解析!

    EIGRP的思维导图 如图,我想采用一种全新的"框架式"教学法,或者叫"盖楼",旨在利用抽象的外部接口,分类分层地介绍各个机制之间的关系.其实任何学习到最后都 ...

  5. 微信小程序中的微信支付js代码和流程详解

    微信支付流程 步骤 (一)获取用户的信息 (二)统一下单(返回的prepay_id用于第(三)步的请求参数) (三)发起支付请求 操作(这边假设你已经获得了用户的openId) (一).获取用户ope ...

  6. 201521123063 《JAVA程序设计》 第5周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 1.2 可选:使用常规方法总结其他上课内容. 上周学习了继承和多态,满足is-a条件,但是发现会导致继承的滥用,如果只是但以的 ...

  7. 201521123005《java程序设计》第三周学习总结

    1. 本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.使用思维导图将这些碎片化的概念.知识组织起来.使用工具画出本周学习到的知识点. 参考资料: 百度脑图 XMind 2. 书面作业 ·Q ...

  8. vbs读取excel的一个实例

    功能:在excel中对ip与loginType这两列进行遍历读取.本程序依赖于excel文件的"sheet2"表单中具有这两列. dim dictTarget, objExcel ...

  9. 201521123034《Java程序设计》第十一周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 多线程的冲突 互斥共享(有时两个或两个以上的线程需要同时对 而线程之间如果不加以控制,会产生一种情况-竞争) sy ...

  10. apache: apache-tomcat-6.0.35完整下载

    Index of /dist/tomcat/tomcat-6/v6.0.35/bin Name Last modified Size Description Parent Directory - ex ...