参考SQL技术内幕写了一段脚本,可以通过这段脚本查看执行指定SQL语句后,系统生成了哪些执行计划.使用时注意以下几点:

  1. 修改use MyTest,换成自己的数据库名字.
  2. exec sp_page_test TestTable','*','id',20,100,0,'1=1'替换成要测试的SQL语句
  3. 该脚本只支持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

转载于:https://www.cnblogs.com/harry-wang/p/5959416.html

[sqlserver脚本]查看指定SQL语句生成了哪些执行计划相关推荐

  1. oracle 相同的sql执行两次 执行计划会不一样吗,一条SQL语句,两次执行计划的差距...

    jonas_li 发表于 2013-12-18 15:14 执行计划也可以贴出来,看看,是否真的如此 Execution Plan ---------------------------------- ...

  2. Sqlserver,Mysql基础SQL语句

    Sqlserver,Mysql基础SQL语句 SqlServer 建表 修改字段默认值 修改表名 修改字段名 添加字段 例子 更改字段 删除字段 添加表注释 添加字段注释 数据排序 方法一 ROW_N ...

  3. ORM映射框架总结--SQL 语句生成组件

    1.       SQL 语句生成组建 之前说过ORM框架中有一个非常重要的组件,那就是SQL语句生成组件.SQL语句生成组件,顾名思义就是用于生成sql语句的一个组件.之前的Attribute 是用 ...

  4. 渗透之——SQL语句生成一句话

    转载请注明出处:https://blog.csdn.net/l1028386804/article/details/85296880 1.SQLServer执行SQL语句生成一句话 select '& ...

  5. 使用sql语句生成报表_SQL Server报表服务:如何使用报表生成器处理常见的最终用户要求

    使用sql语句生成报表 In this article, we will discuss the SQL Server Reporting Service Report Builder and loo ...

  6. mysql语句随机数_程序生成随机数与SQL语句生成随机数

    随机数可以通过程序生成,也可以通过SQL语句生成.通过程序生成随机数时一般采用硬件的编号+时间作为种子,这种方法在瞬间插入数据库N条数据的时候会影响随机数的效果,生成很多相邻的插入值相同.所以频繁插入 ...

  7. oracle 生成 sql语句,Oracle使用SQL语句生成日历的实现方法

    Oracle使用SQL语句可以实现日历的功能,下面就为您详细介绍Oracle使用SQL语句生成日历的实现方法,希望对您能有所帮助. 1 要构造某年某月的日历,必须先知道这个月的开始时间,结束时间及天数 ...

  8. sql并行查询oracle,oracle 查看并行sql语句的并行数量

    1.执行sql:select /*+ parallel(a,4) */ * from tf_f_user a where rownum<100000; 2.如何查看该sql语句的并行数量: se ...

  9. oracle+生成+sql语句,Oracle使用SQL语句生成日历的实现方法

    Oracle使用SQL语句可以实现日历的功能,下面就为您详细介绍Oracle使用SQL语句生成日历的实现方法,希望对您能有所帮助. 1 要构造某年某月的日历,必须先知道这个月的开始时间,结束时间及天数 ...

最新文章

  1. ubuntu 安装 python3.6.8
  2. 已拿30K offer!感谢这几个公众号提供的各种学习教程
  3. datagrip导入csv数据配合ajax+mysql+Flask实验
  4. macOS下安装ipython
  5. 51nod1821-最优集合【贪心】
  6. 《七步掌握业务分析》读书笔记六
  7. 【CodeForces - 675C】Money Transfers(思维,前缀和)
  8. matplotlib 散点图_matplotlib画图 绘制散点图案例
  9. MySQL主键和外键使用及说明
  10. [摘录]第2章 中场谈判技巧
  11. C++实现字符串数组的计数功能总结
  12. Julia : 关于类型的匹配和规范建议
  13. python词云图详细教程
  14. 电视上设置禁止安装不是从Android,简单操作解决电视不让安装第三方软件方法...
  15. jsencrypt php,js加密php解密(一)
  16. 网页动画的12原则,帮你做出漂亮的动画效果
  17. 世纪光棍节、神棍节快乐!
  18. 【华为OD机试Python实现】HJ67 24点游戏算法(中等)
  19. 思科下一代数据中心Nexus7000优势
  20. js面向对象 —— ES6

热门文章

  1. 设置c#windows服务描述及允许服务与桌面交互的几种方法
  2. java中float和double型数据在赋值时有哪些注意事项?,java语言中float和double类型的数据在编程时的注意事项...
  3. (转载)java工程师15本必读书籍推荐
  4. Java把以0结尾的字符串_Java中字符串为什么不以\0结尾
  5. ae万能弹性表达式_AE脚本精品表达式合集效果库 iExpressions 3.1.006【资源分享1453】...
  6. for循环的执行顺序
  7. Python 调用有道翻译api接口翻译外文网站的整篇西班牙文实战演示
  8. chrome 浏览器自保留端口、安全端口有哪些?chrome不能访问某个端口的环境网址,但是其它的浏览器可以访问原因及解决办法
  9. CTFshow php特性 web130
  10. CTFshow 命令执行 web51