【问题标题】:In SQL Server, in which case the query plan contain <ParameterList> tag?在 SQL Server 中,在哪种情况下查询计划包含 <ParameterList> 标记?
【发布时间】:2018-04-02 09:57:53
【问题描述】:

我正在使用以下查询从 SQL Server 数据库中获取查询计划:

SELECT st.text as parameterized_query,[qp].[query_plan]
FROM sys.dm_exec_cached_plans cp 
CROSS APPLY sys.dm_exec_sql_text ( cp.plan_handle ) st 
CROSS APPLY sys.dm_exec_query_plan ( cp.plan_handle ) qp

  1. 我发现如果我在查询中使用DECLARESET,那么:

    1.1。 parameterized_query 类似于:DECLARE @p1 INT; SET @p1 = 1; SELECT * FROM a WHERE ID &gt; @p1

    1.2。 query_plan 不包含 &lt;ParameterList&gt; 标签。

  2. 在其他一些情况下(我不明白):

    2.1。 parameterized_query 类似于:(@p1 INT)SELECT * FROM a WHERE ID &gt; @p1

    2.2。 query_plan 包含 &lt;ParameterList&gt; 标签。

情况2什么时候发生?

【问题讨论】:

  • 应用程序发生的第二种情况是将变量绑定到参数(类似于将参数传递给存储过程)。

标签: sql-server sql-execution-plan


【解决方案1】:

如果AUTO PARAMETERIZATION设置为ON,SQL Server会使用参数编译一些查询,编译时传入的值列在标签中。

您可能会发现此链接很有用: http://www.benjaminnevarez.com/2010/06/auto-parameterization-in-sql-server/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 2013-04-25
    • 2020-04-30
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    相关资源
    最近更新 更多