Jef*_*ffO 6 sql-server performance stored-procedures
我应该注意哪些因素会导致过多的存储过程重新编译?
将导致存储过程重新编译的代码示例将非常有用.目的是避免重新编译,如果可能的话,应该提高性能.
导致不同输出的动态SQL和变量路径(通过数据类型和/或列数)似乎可能会出现问题.这些假设是否正确?还有其他例子吗?
编辑:我找到了另一个例子.在流控制语句中创建临时表将导致重新编译.
EBa*_*arr 18
有几种方法可以确保重新编译存储过程:
WITH RECOMPILE
,exec()
)sp_recompile
.DBCC FREEPROCCACHE
重新编译的因素
除了上面列出的硬因素之外,是什么导致存储过程重新编译?好吧,很多东西.其中一些与上面的列表交织在一起,但我想重新呈现它们b/c它可能不是很明显.
这绝不是一份详尽的清单.无论您使用SQL Server多长时间,查询优化器都会发展变得惊人.但是这里有一些可能有用的资源:
但等等 - 更多!
话虽如此,你的问题中的假设是重新编译总是对性能不利.事实上,经常补偿是好的.
所以你什么时候想要它重新编译?让我们看一个按姓氏搜索的proc的例子.存储过程执行' 参数嗅探 '这是一个祝福(如果它适合你)和一个诅咒(如果它对你有效).首先通过某人搜索Zebr%
zerbrowski.姓氏索引意识到这是非常具体的,并且将返回,比如说,从一百万行中返回3行 - 因此构建了一个执行计划.使用proc编译为低行结果,下一次搜索是为了S%
.嗯,S是你最常见的名字,在100万中匹配93,543行.
归档时间: |
|
查看次数: |
13414 次 |
最近记录: |