MSSQLSERVER执行计划详解

--1、取前10条-性能相同

select top 10 * from ServiceInvoke; --创建时间聚集索引扫描
select top 10 * from AdoLog; --主键ID聚集索引扫描

--2、根据聚集索引排序-性能提升
--创建时间聚集索引扫描,但是时间索引是已排序的,所以不需要再排序
select top 10 * from ServiceInvoke order by CreateTime desc;
--主键ID聚集索引全表扫描,然后根据时间字段排序
select top 10 * from AdoLog order by CreateTime desc;

--3、根据非索引排序-性能相同
--创建时间聚集索引扫描,然后根据排序字段排序
select top 10 * from ServiceInvoke order by IsDeleted desc;
--主键ID聚集索引扫码,然后根据排序字段排序
select top 10 * from AdoLog order by Message desc;

--4、根据聚集索引筛选,性能提升
--创建时间聚集索引查找
select top 10 * from ServiceInvoke where CreateTime > '2018-12-18';
--主键ID聚集索引扫描
select top 10 * from AdoLog where CreateTime > '2018-12-18' ;

--5、根据聚集索引筛选排序-性能提升
--创建时间聚集索引查找
select top 10 * from ServiceInvoke where CreateTime > '2018-12-18' order by CreateTime desc;
--主键ID聚集索引扫描
select top 10 * from AdoLog a where CreateTime > '2018-12-18' order by CreateTime desc;

--6、普通字段筛选聚集索引字段排序-对于排序性能消耗较大的情况下性能提升
--创建时间聚集索引扫描,然后条件过滤,但是不用排序
select top 10 * from ServiceInvoke where OutParam like '%330723196704072361%' order by CreateTime desc;
--主键ID聚集索引扫描,然后排序
select top 10 * from AdoLog where Message like '%330723196704072361%' order by CreateTime desc;

--7、多字段筛选聚集索引排序-性能提升
--创建时间聚集索引查找,然后条件过滤,但是不用排序
select top 10 * from ServiceInvoke where OutParam like '%330723196704072361%' and CreateTime > '2018-12-18' order by CreateTime desc;
--主键ID聚集索引扫描,然后排序
select top 10 * from AdoLog a where Message like '%330723196704072361%' and CreateTime > '2018-12-18' order by CreateTime desc;

--8、多字段搜索普通字段排序-性能提升
--创建时间聚集索引查找,然后条件过滤,排序
select top 10 * from ServiceInvoke where OutParam like '%330723196704072361%' and CreateTime > '2018-12-18' order by OutParam desc;
--主键ID聚集啥事扫描,排序
select top 10 * from AdoLog a where Message like '%330723196704072361%' and CreateTime > '2018-12-18' order by Message desc;

--9、统计行数
--主键非聚集索引扫描
select count(*) from ServiceInvoke
--主键非聚集索引扫描,但是查找行数明细减少,性能提升
select count(*) from ServiceInvoke s where s.CreateTime > '2018-12-19'
--创建时间聚集索引扫描,然后过滤
select count(*) from ServiceInvoke s where s.InputParam like '%152%'
--创建时间聚集索引查找,然后过滤-性能提升
select count(*) from ServiceInvoke s where s.CreateTime > '2018-12-19' and s.InputParam like '%152%'

--10、使用聚集索引和强制使用非聚集索引-根据聚合索引字段(创建时间)筛选出来的数据越少,查询开销提升越明显
--创建时间聚合索引查找
select count(*) from ServiceInvoke s where s.CreateTime > '2018-12-19' and s.InputParam like '%152%'
--主键ID非聚合索引扫描
select count(*) from ServiceInvoke s with(index=[PK_dbo.ServiceInvoke]) where s.CreateTime > '2018-12-19' and s.InputParam like '%152%'

SqlServer执行计划的更多相关文章

  1. SQLSERVER执行计划详解

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

  2. 看懂SqlServer执行计划

    在园子看到一篇SQLServer关于查询计划的好文,激动啊,特转载.原文出自:http://www.cnblogs.com/fish-li/archive/2011/06/06/2073626.htm ...

  3. SqlServer 执行计划及Sql查询优化初探

    网上的SQL优化的文章实在是很多,说实在的,我也曾经到处找这样的文章,什么不要使用IN了,什么OR了,什么AND了,很多很多,还有很多人拿出仅几S甚至几MS的时间差的例子来证明着什么(有点可笑),让许 ...

  4. SQLServer 执行计划

    http://www.cnblogs.com/fish-li/archive/2011/06/06/2073626.html#_label0   http://www.jb51.net/article ...

  5. SqlServer 中如何查看某一个Sql语句是复用了执行计划,还是重新生成了执行计划

    我们知道SqlServer的查询优化器会将所执行的Sql语句的执行计划作缓存,如果后续查询可以复用缓存中的执行计划,那么SqlServer就会为后续查询复用执行计划而不是重新生成一个新的执行计划,因为 ...

  6. sqlser 2005 使用执行计划来优化你的sql

    一:sqlserver 执行计划介绍    sqlserver 执行计是在sqlser manager studio 工具中打开,是检查一条sql执行效率的工具.建议配合SET STATISTICS ...

  7. 浅析SqlServer简单参数化模式下对sql语句自动参数化处理以及执行计划重用

    我们知道,SqlServer执行sql语句的时候,有一步是对sql进行编译以生成执行计划, 在生成执行计划之前会去缓存中查找执行计划 如果执行计划缓存中有对应的执行计划缓存,那么SqlServer就会 ...

  8. Sql Server之旅——第十一站 简单说说sqlserver的执行计划

    我们知道sql在底层的执行给我们上层人员开了一个窗口,那就是执行计划,有了执行计划之后,我们就清楚了那些烂sql是怎么执行的,这样 就可以方便的找到sql的缺陷和优化点. 一:执行计划生成过程 说到执 ...

  9. SQLServer查询执行计划分析 - 案例

    SQLServer查询执行计划分析 - 案例 http://pan.baidu.com/s/1pJ0gLjP 包括学习笔记.书.样例库

随机推荐

  1. windows下Redis 主从读写分离部署

    原文:windows下Redis 主从读写分离部署 1.可直接下载window下的运行文件(下面这个链接) 也可以浏览github 查看相应的版本说明文档 https://github.com/Ser ...

  2. JDK10下安装Eclipse photon 提示Java for Windows Missing

    这两天把服务器清理了一下,操作系统也重新装了,没办法啊,就是喜欢倒腾...在重新安装软件的时候,我又到各个官网去看了软件的最新版本,其中就去了JDK和Eclipse的官网溜达了一圈. 很久没有更新过自 ...

  3. 怎样开始GO编程?

    如果你想开始学习GO语法前,请先背熟下述4点: 1. 环境变量: 使用go env查看环境变量 GOARCH/GOHOSTARCH: 体系架构, amd64或386 GOOS/GOHOSTOS: 操作 ...

  4. 就服务器项目部署debug谈谈自己的感受

    前言 学校小组Project那些外国人啥也不会, 基本上我一个人全包了前端和后端, 说实话这些天来也感受到了写一个比较拿得出手的web确实也不是这么容易的, 特别是我没什么项目经验, 很多时候碰到问题 ...

  5. CheckBox IsHitTestVisible

    <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"></Colu ...

  6. BackgroundWorker使用

    using System.ComponentModel; private BackgroundWorker worker;  worker = new BackgroundWorker(); work ...

  7. JNDI(Java Naming and Directory Interface)

    # 前言 内容基本拷贝,整理出来,方便以后回忆. # What The Java Naming and Directory Interface™ (JNDI) is an application pr ...

  8. MVC 组件之间的关系

    View和Controller都可以直接请求Model 但是Model不依赖View和controller lController可以直接请求View来显示具体页面 View不依赖Controller ...

  9. 完美实现鼠标拖拽事件,解决各种小bug,基于jquery

    鼠标拖拽事件是web中使用频率极高的事件,之前写过的代码包括网上的代码,总存在各种各样的问题,包括拖拽体验差,松开鼠标后拖拽效果仍存在以及代码冗余过大等 本次我才用jQuery实现一个尽可能高效的拖拽 ...

  10. AFN小结(简单的封装)

    AFN小结 1,AFN概念.原理 2,AFN的封装使用 3,AFN与其它框架对比 ————————————————————————————————— 1 , AFN的概念原理: AFN的基础是NSUR ...