您的位置:威尼斯官方网站 > 威尼斯官方网站登录 > SQL本领内情

SQL本领内情

发布时间:2020-01-04 07:04编辑:威尼斯官方网站登录浏览(162)

    参考SQL本事底细写了后生可畏段脚本,能够经过这段脚本查看实行钦点SQL语句后,系统生成了怎么执行布置.使用时只顾以下几点:

    1. 修改use MyTest,换到温馨的数据库名字.
    2. exec sp_page_test TestTable','*','id',20,100,0,'1=1'替换来要测量检验的SQL语句
    3. 该脚本只援助Sql Server 贰零零柒及以上版本
    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
    

    本文由威尼斯官方网站发布于威尼斯官方网站登录,转载请注明出处:SQL本领内情

    关键词:

上一篇:没有了

下一篇:没有了