在SQL Server中,允许SP中的一个查询存在多个执行计划而不必每次都重新编译的最佳方式是什么?
例如,我有一个例子,根据查询使用的临时表中有多少行,查询计划会有很大的不同。由于没有令人满意的“一刀切”计划,而且每次都重新编译是不可接受的,因此我最终在几个IF语句中多次复制/粘贴(ick) SP中的主查询,迫使SQL引擎为每个case提供自己的最佳计划。它实际上在性能方面看起来工作得很好,但感觉有点笨拙。(我知道我同样可以将这一部分分成多个SP来做同样的事情。)有没有更好的方法来做这件事?
IF @RowCount < 1
[paste query here]
ELSE IF @RowCount < 50
[paste query here]
ELSE IF @RowCount < 200
[paste query here]
ELSE
[paste query here]发布于 2012-01-30 21:50:44
SQL Server 2005+具有语句级重新编译功能,并且能够更好地处理这种分支。您仍然有一个计划,但是该计划可以在语句级别进行部分重新编译。
但它是丑陋的。
我个人倾向于使用@Mitch using的选择,因为您无论如何都需要使用临时表对存储过程进行重新编译。请参阅Temp table and stored proc compilation
https://stackoverflow.com/questions/5973634
复制相似问题