存储过程计划优化

时间:2013-12-18 21:06:35

标签: sql sql-server optimization

我在SQL Server 2008 R2中有一个存储过程,它会查询一个非常大的&非常繁忙的表基于传入的一些参数值。我无法控制模式。

大多数情况下,存储过程执行得非常好,但有时它似乎编译了一个非常糟糕的执行计划(我的猜测是一个表扫描 - 这对于这个表来说是疯了)。

什么是优化存储过程以避免这种情况的最佳方法?我正在尝试OPTIMIZE FOR&使用一些合理的参数值

然而,我认为USE PLAN&只强制一个我知道运行良好的执行计划(没有JOIN s,表上只有3个索引,表大小非常一致(BIG!)所以我认为计划不应该真正需要改变)。

任何人都有过这种事情的经历吗?什么效果最好?

2 个答案:

答案 0 :(得分:1)

Grant Fritchey是我当地PASS分会的朋友。

任何人,您确定没有参数嗅探吗?

通常会出现偏斜的数据。

如果是这样,有七种不同的方法来对抗它。查看Grant的幻灯片。

http://www.scarydba.com/wp-content/uploads/2011/01/LuckyConnections.pdf

但关键是要以图形格式查找/查看好的和坏的计划。

为什么一个比下一个好。一旦你知道发生了什么,就选择一种解决方法。

祝你好运

Ĵ

答案 1 :(得分:0)

我认为我破解了它 - 问题似乎是导致基础表中没有记录的参数。

我添加了一个日期谓词 - 即使查询并不真正需要,因为它使用整数升序键来返回X最近的记录。

当参数值没有匹配记录时,这大大减少了搜索的记录数。

希望这是有道理的!

感谢您的评论 - 非常了解这些内容。