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. Go程序开发---Go环境配置:CentOS6.5+Go1.8标准包安装

    1.Go安装 1.1Go的三种安装方式 Go有多种安装方式,可以选择自己习惯的方式进行,这里介绍三种安装方式: 1)Go源码安装 2)Go标准包安装 3)第三方工具安装 这里主要介绍下Go标准包在Ce ...

  2. Jenkins 部署

    1  修改jenkins的根目录,默认地在C:\Documents and Settings\AAA\.jenkins . .jenkins ├─jobs│  └─JavaHelloWorld│    ...

  3. MySQL 日期时间 专题

    1.1 获得当前日期+时间(date + time)函数:now() 除了 now() 函数能获得当前的日期时间外,MySQL 中还有下面的函数: current_timestamp()   curr ...

  4. JPA示例项(J采纳PA的hibernate实现版本号)

    (1).JPA介绍: JPA全名Java Persistence API ,Java坚持API这是Sun公司Java EE 5规范中提出的Java持久化接口. JPA吸取了眼下Java持久化技术的长处 ...

  5. Something write in FSE 2014

    Now, I find a problem, I have become my personal CSDN into a personal electronic diary. Actually, th ...

  6. 【转载】MySQL Replication 环境安装与配置

    安装[root@msr01 ~]# yum install mysql-serverInstalled:mysql-server.x86_64 0:5.1.73-3.el6_5 Dependency ...

  7. WPF依赖项属性不需要包装属性也可以工作

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  8. .Net中使用数据库(sqlite)的大体流程(简单向)

    说来数据库,各种语言各种数据库在操作上大体无异,基本都是连接数据库.操作数据库.关闭数据库连接的流程,不过Sqlite由于是单文件数据库,相比其他服务器的数据库连接更简单,只需要给定数据库文件的路径即 ...

  9. websocket协议学习

    一 实验代码 client.html websocket_server.go package main import ( "crypto/sha1" "encoding/ ...

  10. C# dotnetcore2.0结合Selenium搜索网页

    using System; using OpenQA.Selenium; using OpenQA.Selenium.Chrome; namespace ConsoleApp_Selenium { c ...