[sqlserver脚本]查看指定SQL语句生成了哪些执行计划
参考SQL技术内幕写了一段脚本,可以通过这段脚本查看执行指定SQL语句后,系统生成了哪些执行计划.使用时注意以下几点:
- 修改
use MyTest,换成自己的数据库名字. - 将
exec sp_page_test TestTable','*','id',20,100,0,'1=1'替换成要测试的SQL语句 - 该脚本只支持Sql Server 2005及以上版本
set nocount on;
use MyTest; --这里使用你自己的数据库
dbcc freeproccache;--清空过程缓存
go
--用tempdb..optstats表来捕获所执行SQL语句生成的执行计划信息
if(OBJECT_ID('tempdb..optstats') is not null)
drop table tempdb..optstats;
go
--这条语句用于创建临时表 tempdb..optstats
select *,0 as run
into tempdb..optstats
from sys.dm_exec_cached_plans cp
CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle)
go
--该语句的计划将被保存到过程缓存
--这样当下一次执行时不会产生任何优化器事件.
--后面的GO用于确保下次执行这段脚本时
--可以重用insert的计划
go
insert into tempdb..optstats
select *,1 as run
from sys.dm_exec_cached_plans cp
CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle)
go
--原因同上,只是用"2"替换"1"
--这样我们将得到不同的计划.
go
insert into tempdb..optstats
select *,2 as run
from sys.dm_exec_cached_plans cp
CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle)
go
--清空临时表
truncate table tempdb..optstats
go
--存储"运行前的"信息,
--保存到临时表,run列的值为"1"
go
insert into tempdb..optstats
select *,1 as run
from sys.dm_exec_cached_plans cp
CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle)
go
--在这里执行你自己的语句或批处理
--/*** 下面是一个示例
go
exec sp_page_test 'TestTable','*','id',20,100,0,'1=1'
go
--***/
go
--存储"运行后的"信息,
--保存到临时表,RUN列的值为"2"
go
insert into tempdb..optstats
select *,2 as run
from sys.dm_exec_cached_plans cp
CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle)
go
--从临时表中提取出run1和run2之间
--执行所测试SQL语句后生成的执行计划
select * from tempdb..optstats where bucketid in(
select tt.bucketid from (
select bucketid,COUNT(*) as cc from tempdb..optstats group by bucketid ) tt where tt.cc=1
)
go
--删除临时表
Drop table tempdb..optstats;
go
set nocount off
[sqlserver脚本]查看指定SQL语句生成了哪些执行计划的更多相关文章
- SqlServer 中如何查看某一个Sql语句是复用了执行计划,还是重新生成了执行计划
我们知道SqlServer的查询优化器会将所执行的Sql语句的执行计划作缓存,如果后续查询可以复用缓存中的执行计划,那么SqlServer就会为后续查询复用执行计划而不是重新生成一个新的执行计划,因为 ...
- SQLSERVER图片查看工具SQL Image Viewer5.5.0.156
原文:SQLSERVER图片查看工具SQL Image Viewer5.5.0.156 SQLSERVER图片查看工具SQL Image Viewer5.5.0.156 在2013年某一次北京SQL ...
- 在线数据库表(sql语句)生成java实体类工具
相信每个做java开发的读者,都接触过SQL建表语句,尤其是在项目开发初期,因为数据库是项目的基石. 在现代项目开发中,出现了许多ORM框架,通过简单的实体映射,即可实现与数据库的交互,然而我们最初设 ...
- Access、SQLServer、Oracle常见SQL语句应用区别
Access.SQLServer.Oracle常见SQL语句应用区别 关劲松 PMP 如果要兼容Access.SQL Server.Oracle三个数据库版本:我们在编写SQL语句的过程中,尽量使用一 ...
- 查看慢sql语句
查看慢sql语句 st.text AS SQL_Full --父级完整语句 ,) , ((CASE statement_end_offset THEN DATALENGTH(st.text) ELSE ...
- PowerDesigner通过SQL语句生成PDM文件并将name和comment进行互相转换
本篇文章主要介绍了PowerDesigner通过SQL语句生成PDM文件并将name和comment进行互相转换 超详细过程(图文),具有一定的参考价值,感兴趣的小伙伴们可以参考一下 1.软件准备 软 ...
- oracle 查看并行sql语句的并行数量和如何开并行
1.执行sql:select /*+ parallel(a,4) */ * from tf_f_user a where rownum<100000; 2.如何查看该sql语句的并行数量: se ...
- SQL语句到底是怎么执行的
写在前面的话:有时不理解SQL语句各个部分执行顺序,导致理解上出现偏差,或者是书写SQL语句时随心所欲,所以有必要了解一下sql语句的执行顺序.可以有时间自己写一个简单的数据库,理解会更加深入.下面就 ...
- 普通SQL语句可以用Exec执行
例如存储过名为:myprocedure use AdventureWorks create procedure myprocedure @city varchar(20) as begin selec ...
随机推荐
- DevOps 创建pipline报错:The value specified for SourceVersion is not a valid commit ID
报错内容 The value specified for SourceVersion is not a valid commit ID 解决 官方给出的解答: Thank you for your f ...
- SHFileOperation的用法
//删除文件或者文件夹bool DeleteFile(char * lpszPath){SHFILEOPSTRUCT FileOp={0};FileOp.fFlags = FOF_ALLOWUNDO ...
- python pip源配置
一.Linux版本: linux的文件存放在:~/.pip/pip.conf 二.windows版本: 在用户文件夹下创建pip目录,并在pip目录下创建pip.ini文件(%HOME%\pip\pi ...
- centos linux系统日常管理复习 CPU物理数逻辑核数,iftop ,iotop ,sar ,ps,netstat ,一网卡多IP,mii-tool 连接,ethtool速率,一个网卡配置多个IP,mii-tool 连接,ethtool速率 ,crontab备份, 第十八节课
centos linux系统日常管理复习 物理CPU和每颗CPU的逻辑核数,uptime ,w,vmstat,iftop ,iotop ,sar ,ps,netstat ,一个网卡配置多个IP,mii ...
- android 的 ExpandableListView Example Tutorial
https://www.journaldev.com/9942/android-expandablelistview-example-tutorial Welcome to Android Expan ...
- [svc]堡垒机模型设计初步
models from django.contrib.auth.models import AbstractUser from django.db import models # Create you ...
- mysql key index区别
看似有差不多的作用,加了Key的表与建立了Index的表,都可以进行快速的数据查询.他们之间的区别在于处于不同的层面上. Key即键值,是关系模型理论中的一部份,比如有主键(Primary Key), ...
- MyBatis—mapper.xml映射配置
SQL文件映射(mapper文件),几个顶级元素的配置: mapper元素:根节点只有一个属性namespace(命名空间)作用: 1:用于区分不同的mapper,全局唯一. 2:绑定DAO接口,即面 ...
- MySQL connector c++使用笔记
MySQL的connector官方地址: http://dev.mysql.com/downloads/connector/ 针对c++来说, 可以选择c或者c++的库. c++的实现是参考了java ...
- HCNP学习笔记之史上最全华为路由器交换机配置命令大合集
先来一张思科和华为命令的对照表: 史上最全华为路由器交换机配置命令大合集,熟练掌握下面的华为路由器交换机配置知识点,你只需花几分钟的时间就能明白华为路由器交换机配置.交换机的配置命令等等. 华为路由器 ...