gpt4 book ai didi

sql-server - 此查询是否相当于 SQL Server 2008 的 OPTIMIZE FOR UNKNOWN?

转载 作者:行者123 更新时间:2023-12-03 01:42:13 26 4
gpt4 key购买 nike

我正在维护 SQL Server 2005 的存储过程,我希望能够使用 2008 年的一项新功能,该功能允许查询提示:“OPTIMIZE FOR UNKNOWN”

似乎以下查询(为 SQL Server 2005 编写)估计与指定 OPTION (OPTIMIZE FOR UNKNOWN) 相同的行数(即选择性):

CREATE PROCEDURE SwartTest(@productid INT)
AS
DECLARE @newproductid INT
SET @newproductid = @productid

SELECT ProductID
FROM Sales.SalesOrderDetail
WHERE ProductID = @newproductid

此查询通过声明和设置新变量来避免参数嗅探。这真的是 SQL Server 2005 针对 OPTIMIZE-FOR-UNKNOWN 功能的解决方法吗?或者我错过了什么? (赞赏权威链接、答案或测试结果)。

更多信息:对 SQL Server 2008 的快速测试告诉我,此查询中的估计行数实际上与指定 OPTIMIZE FOR UNKNOWN 时相同。 SQL Server 2005 上的行为是否相同?我记得我曾听说过,如果没有更多信息,SQL Server 优化引擎必须猜测参数的选​​择性(对于不等式谓词,通常为 10%)。不过,我仍在寻找有关 SQL 2005 行为的明确信息。但我不太确定该信息是否存在......

更多信息2:需要明确的是,这个问题要求对 UNKNOWN 查询提示和我描述的参数屏蔽技术进行比较。

这是一个技术问题,而不是一个解决问题的问题。我考虑了很多其他选择并最终决定了这个。所以这个问题的唯一目标是帮助我获得一些信心,相信这两种方法是等效的。

最佳答案

我最近多次使用该解决方案来避免 SQL 2005 上的参数嗅探,在我看来,它与 SQL 2008 上的 OPTIMIZE FOR UNKNOWN 做同样的事情。它解决了我们在一些更大的问题上遇到的很多问题。存储过程有时在传递某些参数时会挂起。

关于sql-server - 此查询是否相当于 SQL Server 2008 的 OPTIMIZE FOR UNKNOWN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2225325/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com