sql存储过程执行计划优化:参数嗅探及其影响及其影响
在提到的情况下,即使使用的值为null,也为@MyDate生成的执行计划也很差。此行为是不寻常的,并且暗示了参数嗅探的问题。 solufce:禁用参数sniffing
一个解决方案是通过使用参数变量来禁用参数sniffing: @mydate dateTime = null 作为 声明@MyDate_Copy DateTime 设置@mydate_copy = @mydate 如果@mydate_copy为null SET @mydate_copy = current_timestamp - 使用@mydate_copy
对问题的洞察SQL Server 2005中的基本问题是一个已知问题,在某些补丁级别中参数嗅探是一个已知的问题。 In SQL Server 2008, the OPTIMIZE FOR UNKNOWN clause can be used to resolve such issues.
CREATE PROCEDURE MyProc @MyDate DATETIME = NULL AS IF @MyDate IS NULL SET @MyDate = CURRENT_TIMESTAMP -- Do Something using @MyDateAdditional Considerations
To further improve performance when using stored procedures with input parameters, it is recommended to:
Use parameterized queries to ensure the database optimizes the execution plan有效。避免使用空值作为输入参数,因为它们可能会触发意外的优化问题。
监视存储过程的性能并根据需要调整执行计划。免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3