zoukankan      html  css  js  c++  java
  • 动态语句exec与sp_executesql执行计划区别

    --測試如下(Windows2003+SQL2005 sp3)

     

    USE tempdb

    go

    IF OBJECT_ID ( 'Test' ) IS NOT NULL

        DROP TABLE Test

    SELECT * INTO Test FROM syscolumns

     

    go

    --step1:

    DBCC FREEPROCCACHE -- 清空緩存中的執行計劃

     

    --step2:( 執行3次 )

    DECLARE @TabName sysname , @ID INT , @SQL NVARCHAR ( 4000)

    SET @TabName= 'Test'

    SET @ID= 103--@ID{101,102,103} -- 輸入次值,執行3次

    SET @SQL= N'SELECT * FROM ' + @TabName+ ' WHERE ID=' + RTRIM ( @ID)+ ' order by ID asc'

    EXEC ( @SQL)

    -- 查看產執行計劃

    SELECT dbName= DB_NAME ( dbID ) , Cacheobjtype, objtype, objid , sql

    FROM sys.syscacheobjects WHERE cacheobjtype= 'Compiled Plan'   AND objtype IN( 'Adhoc' , 'prepared' ) AND sql LIKE '%Test%' AND sql NOT LIKE '%syscacheobjects%' AND sql NOT LIKE '%msdb.%'

     

    -- 執行計劃產生3次

    /*

    dbName  Cacheobjtype    objtype objid   sql

    tempdb  Compiled Plan   Adhoc   319724907   SELECT * FROM Test WHERE ID=102 order by ID asc

    tempdb  Compiled Plan   Adhoc   513201771   SELECT * FROM Test WHERE ID=103 order by ID asc

    tempdb  Compiled Plan   Prepared    475976984   (@1 tinyint)SELECT * FROM [Test] WHERE [ID]=@1 ORDER BY [ID] ASC

    tempdb  Compiled Plan   Adhoc   674221447   SELECT * FROM Test WHERE ID=101 order by ID asc

    */

    go

    --step1:

    DBCC FREEPROCCACHE -- 清空緩存中的執行計劃

     

    --step2:( 執行三次 )

    DECLARE @TabName sysname , @ID INT , @SQL NVARCHAR ( 4000)

    SET @TabName= 'Test'

    SET @ID= 101--@ID{101,102,103} -- 輸入次值,執行三次

    SET @SQL= N'SELECT * FROM ' + @TabName+ ' WHERE ID=@ID order by ID asc'

    exec sp_executesql @stmt= @SQL, @Params= N'@ID int' , @ID= @ID

    SELECT dbName= DB_NAME ( dbID ) , Cacheobjtype, objtype, objid , sql FROM sys.syscacheobjects WHERE cacheobjtype= 'Compiled Plan'   AND objtype IN( 'Adhoc' , 'prepared' ) AND sql LIKE '%Test%' AND sql NOT LIKE '%syscacheobjects%' AND sql NOT LIKE '%msdb.%'

     

    -- 執行計劃產生1次

    /*

    dbName  Cacheobjtype    objtype objid   sql

    tempdb  Compiled Plan   Prepared    421211796   (@ID int)SELECT * FROM Test WHERE ID=@ID order by ID asc

    */

  • 相关阅读:
    [转]浏览器退出之后php还会继续执行么?
    vim常用命令
    [转]自己写PHP扩展之创建一个类
    [转]用C/C++扩展PHP详解
    [转]PHP的执行流程,PHP扩展加载过程
    用扩展开发一个PHP类
    gcc
    Linux常用网络命令
    TCP-IP详解学习笔记1
    在Linux中调试段错误(core dumped)
  • 原文地址:https://www.cnblogs.com/Roy_88/p/5463080.html
Copyright © 2011-2022 走看看