T-SQL备忘(5):查看执行计划
先理解几个概念:表扫描、聚集索引扫描、聚集索引查找、索引扫描、书签查找。
【查看执行计划】
在理解概念之前先得知道如何查看执行计划—Ctrl+L。如下图:

注:SQL Server的执行计划是从右向左看的。
【理解几个概念】
1.表扫描(Table scan):发生于堆表,并且没有可用的索引可用时,会发生表扫描,表示整个表扫描一次。
select * from T_UserInfo
查看执行计划如下:

2.聚集索引扫描(Clustered Index Scan):发生于聚集表,也相当于全表扫描操作,但在针对聚集列的条件如(WHERE Id > 10)等操作时,效率会较好
创建聚集索引:
CREATE CLUSTERED INDEX INDEX_Userid ON T_UserInfo (Userid)

因为给表加了聚集索引所以即使是查找全部数据,它也会使用聚集索引查找。
3.聚集索引查找(Clustered Index Seek):扫描聚集索引中特定范围的行。
select * from T_UserInfo where Userid='ABCDE12EF'

注:前提是where后面的查找条件有聚集索引列。也就是当且仅当where后面的条件包含聚集索引的时候。
4.索引扫描(Index scan):整体扫描非聚集索引。
创建非聚集索引:
CREATE NONCLUSTERED INDEX IX_Name ON T_UserInfo(UserName)
select UserName from T_UserInfo ---只要不是全部的列 *

注:当在非聚集索引中并非覆盖和包含所需全部的列时,SQL Server会利用聚集索引找到数据。
5.书签查找(Bookmark Lookup)
我们知道如果表没有聚集索引的话 select * from T_UserInfo 会使用表扫描,有的话则会使用聚集索引扫描。但是如果有聚集索引机会使用聚集索引扫描。
select * from T_UserInfo with(index (IX_Name)) where UserName='李100'

这里借用一句:上面的过程可以理解为:首先通过非聚集索引找到所求的行,但这个索引并不包含所有的列,因此还要额外去基本表中找到这些列,因此要进行键查找。
【查询性能分析】
这里主要是掌握几个系统命令:
dbcc dropcleanbuffers --注释:清除数据
dbcc freeproccache --注释:清除缓存
Set statistics io on --注释:开启系统资源使用统计
Set statistics time on --注释:开启执行时间统计
T-SQL备忘(5):查看执行计划的更多相关文章
- Oracle数据库查看执行计划
基于ORACLE的应用系统很多性能问题,是由应用系统SQL性能低劣引起的,所以,SQL的性能优化很重要,分析与优化SQL的性能我们一般通过查看该SQL的执行计划,本文就如何看懂执行计划,以及如何通过分 ...
- ORACLE数据库查看执行计划的方法
一.什么是执行计划(explain plan) 执行计划:一条查询语句在ORACLE中的执行过程或访问路径的描述. 二.如何查看执行计划 1: 在PL/SQL下按F5查看执行计划.第三方工具toad等 ...
- [sqlserver脚本]查看指定SQL语句生成了哪些执行计划
参考SQL技术内幕写了一段脚本,可以通过这段脚本查看执行指定SQL语句后,系统生成了哪些执行计划.使用时注意以下几点: 修改use MyTest,换成自己的数据库名字. 将 exec sp_page_ ...
- Mysql查看执行计划-explain
最近生产环境有一些查询较慢,需要优化,于是先进行业务确认查询条件是否可以优化,不行再进行sql优化,于是学习了下Mysql查看执行计划. 语法 explain <sql语句> 例如: e ...
- Mysql查看执行计划
EXPLAIN(小写explain)显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. EXPLAIN + sql语句可以查看mysql的执行 ...
- Oracle 查看执行计划
刚刚开始接触Oracle,使用的工具是Sql Developer.在看执行计划的的时候,选中SQL语句,直接F5即可. 但是这里的执行计划不是最终的执行计划,它使用的是 explain for 命令. ...
- MySQL 查看执行计划
MySQL 使用 explain + sql 语句查看 执行计划,该执行计划不一定完全正确但是可以参考. EXPLAIN SELECT * FROM user WHERE nid = 3; selec ...
- oracle如何查看执行计划
1.在PL/SQL Developer中得到一个SQL的执行计划 输入想要查看执行计划的目标SQL,再按一下快捷键F5就可以了.2.explain plan 命令 explain plan for + ...
- Oracle 固定执行计划-使用SPM(Sql Plan Management)固定执行计划
固定执行计划-使用SPM(Sql Plan Management)固定执行计划 转载自:http://www.lunar2013.com/2016/01/固定执行计划-使用spm%EF%BC%88sq ...
随机推荐
- [转载] ACE 组播校验和出错问题解决
源地址:http://yuanmuqiuyu2000.blog.sohu.com/140904942.html 使用ACE框架写了个组播简单的测试工具,但是测试过程中,总是发现udp校验和出错的信息. ...
- JAVA Map集合类简介
了解最常用的集合类型之一 Map 的基础知识以及如何针对您应用程序特有的数据优化 Map. 本文相关下载: · Jack 的 HashMap 测试· Oracle JDeveloper 10g jav ...
- 用Java编写你自己的简单HTTP服务器
http://blog.csdn.net/yanghua_kobe/article/details/7296156 原文不错. 服务器支持的并发连接数,就是要开多少个线程,每个线程里一个socket监 ...
- ext3grep
- python 详解re模块
正则表达式的元字符有. ^ $ * ? { [ ] | ( ).表示任意字符[]用来匹配一个指定的字符类别,所谓的字符类别就是你想匹配的一个字符集,对于字符集中的字符可以理解成或的关系.^ 如果放在字 ...
- Linux系统VIM编辑器
vim,linux系统中一款超好用的文本编辑器,是vi的升级版. 三种操作模式 命令模式: 控制光标移动,可对文本进行删除.恢复.黏贴等工作 输入模式: 正常的文本录入 末行模式: 保存,退出与设置编 ...
- Control Flow ->> Containers
Sequence Container: 它的作用就是可以把一组任务绑定起来成为一个整体,这样Sequence本身就是具有了任务(task)的特性,比如TransactionOption.如果需要把一组 ...
- SQL Server 数据库初始化准备脚本
通常我们在项目部署前都会写一份数据库初始化脚本.由于数据库外键的限制,我们需要按照数据引用顺序添加初始记录,这个整理过程相当麻烦. 因此写了以下脚本,原理是先去掉所有外键,然后执行一次清空,然后添加数 ...
- Python—开始编程
昨天我是在window上运行的Python,而今天我是在Linux上学习Python. 一般Linux上都已经安装了Python,只要我们在终端上输入命令#python,就会进入Python的交互界面 ...
- hbase-0.94.16 在hadoop-1.2.1的安装配置
1. ZooKeeper的安装: ZooKeeper是一个分布式的服务框架.可用于处理分布式的一些数据管理问题,如统一命名服务.状态同步服务.集群管理.分布式应用配置项的管理等. 步骤如下: a. 准 ...