SQL Server 2014 的“Hekaton”内存表优化宣称,“存储过程中业务逻辑的本机编译”。然而,由于 SQL Server 2012 及更早版本中的“参数嗅探”(请参阅此处和此处)存在问题,我一直被迫使用OPTIMIZE FOR UNKNOWN
(或其等效项)设计大部分存储过程。这有效地防止了查询计划被缓存,并强制 SQL Server 在每次运行时重新编译/重新优化查询。Hekaton 的大部分性能提升来自于本机编译查询的重用,SQL Server 2014 是否可以解决参数嗅探问题,以便我可以实际使用编译查询?
问问题
745 次
2 回答
3
解释型 Transact-SQL 存储过程在第一次执行时编译,与本机编译(又名 Hekaton)存储过程相反,后者在创建时编译(因此,查询执行计划在创建时确定)。在调用时编译解释的存储过程时,优化器在生成执行计划时使用为该调用提供的参数值。在编译期间对参数的这种使用称为参数嗅探。
参数嗅探不用于编译本机编译的存储过程。存储过程的所有参数都被认为具有 UNKNOWN 值。
作为一种解决方法,您可以使用 OPTIMIZE FOR 来指示查询优化器在编译过程时为变量/参数使用特定值。
于 2013-10-03T17:26:49.853 回答
0
据我所知,当您创建“本机”存储过程时,它将立即编译为本机代码,并且不会通过查询优化器。所以我认为“参数嗅探”问题不会成为问题。
于 2013-07-10T17:51:07.483 回答