自动参数化是一个过程,SQL Server 通过这个过程将出现在 SQL 语句中的文本常量替换为诸如 @p1 和 @p2 等参数。然后,SQL 语句的已编译计划以参数化的形式被缓存在计划缓存中,以便后续的语句(只是在文本常量的值上有所不同)可重用已缓存的计划。正如第四部分所提到的,只有参数值不影响查询计划选择的 SQL 语句才会被自动参数化。
SQL Server 的 LPE(语言处理和执行)组件可参数化 SQL 语句。当发现文本常量的值不影响查询计划选择时,QP(查询处理器)组件将声明 LPE 的自动参数化尝试是“安全的”,并继续执行自动参数化;否则,将声明自动参数化是“不安全的”,并将其中止。在第 11.5 节提到的一些性能计数器的值(‘SQLServer:SQL 统计’类别)报告了有关自动参数化的统计信息。
下方列表列举了 SQL Server 2005 不对其进行自动参数化的语句类型。
• | 带有 IN 子句的查询不会被自动参数化。例如: | ||||||||||||||||||||||
• | WHERE ProductID IN (707, 799, 905) | ||||||||||||||||||||||
• | BULK INSERT 语句。 | ||||||||||||||||||||||
• | 带有一个含变量的 SET 子句的 UPDATE 语句。例如: UPDATE Sales.Customer SET CustomerType = N'S' WHERE CustomerType = @a | ||||||||||||||||||||||
• | 带有 UNION 的 SELECT 语句。 | ||||||||||||||||||||||
• | 带有 INTO 子句的 SELECT 语句。 | ||||||||||||||||||||||
• | 带有 FOR BROWSE 子句的 SELECT 或 UPDATE 语句。 | ||||||||||||||||||||||
• | 带有使用 OPTION 子句指定的查询提示的语句 | ||||||||||||||||||||||
• | 其 SELECT 列表包含 DISTINCT 的 SELECT 语句。 | ||||||||||||||||||||||
• | 带有 TOP 子句的语句。 | ||||||||||||||||||||||
• | WAITFOR 语句。 | ||||||||||||||||||||||
• | 带有 FROM 子句的 DELETE 或 UPDATE 语句。 | ||||||||||||||||||||||
• | 当 FROM 子句含有下列之一时:
| ||||||||||||||||||||||
• | 当 SELECT 查询包含一个子查询时 | ||||||||||||||||||||||
• | 当 SELECT 语句包含 GROUP BY、HAVING 或 COMPUTE BY 时 | ||||||||||||||||||||||
• | 用 WHERE 子句中的 OR 加入的表达式。 | ||||||||||||||||||||||
• | expr <> non-null-constant 形式的比较谓词。 | ||||||||||||||||||||||
• | 全文谓词。 | ||||||||||||||||||||||
• | 当 INSERT、UPDATE 或 DELETE 中的目标表是一个表值函数时。 | ||||||||||||||||||||||
• | 通过 EXEC 字符串提交的语句。 | ||||||||||||||||||||||
• | 通过 sp_executesql、sp_prepare 和 sp_prepexec 提交的语句,不带有在 TF 447 下自动参数化的参数。 | ||||||||||||||||||||||
• | 当要求查询通知时。 | ||||||||||||||||||||||
• | 当查询包含通用表表达式列表时。 | ||||||||||||||||||||||
• | 当查询包含 FOR UPDATE 子句时。 | ||||||||||||||||||||||
• | 当 UPDATE 包含 ORDER BY 子句时。 | ||||||||||||||||||||||
• | 当查询包含 GROUPING 子句时。 | ||||||||||||||||||||||
• | 形式如下的 INSERT 语句:INSERT INTO T DEFAULT VALUES。 | ||||||||||||||||||||||
• | INSERT ...EXEC 语句。 | ||||||||||||||||||||||
• | 当查询包含两个常量的对比时。例如: WHERE 20 > 5 | ||||||||||||||||||||||
• | 通过自动参数化,可创建超过 1000 个参数。 |
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/756652/viewspace-242524/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/756652/viewspace-242524/