我在SQL Server 2008 R2中有一个存储过程,它根据传入的一些参数值来查询非常大的单个表&。我无法控制模式。存储过程计划优化
大多数情况下,存储过程执行得非常好,但偶尔它似乎会编译一个真正不好的执行计划(我的猜测是一个表扫描 - 这将是这张表的坚果)。
什么是优化存储过程以避免这种情况的最佳方法?我目前正试图OPTIMIZE FOR
&使用一些合理的参数值
不过,我想我可能是USE PLAN
&更好正义的力量,我知道作品以及执行计划(没有JOIN
S,只是3项指标上表格和表格大小非常一致(BIG!),所以我认为这个计划不应该真的需要改变)。
任何人都有过这种事情的经验?什么效果最好?
我通常首先检查参数嗅探。我花了几个小时重构查询,只是发现使用局部变量而不是参数变量可能已经修复了它。我不知道它是否会帮助你,所以这不是一个答案,但这是一个体面的链接:http://blogs.technet.com/b/mdegre/archive/2012/03/19/what-is- parameter-sniffing.aspx – Malk
你有没有试过在SSMS中查看执行计划?它可能会给你一个视觉上哪个表导致性能受到影响。 –
您是否检查过以确保您的统计信息是最新的?这可能是一个问题,如果有很多的UPDATE/INSERT/DELETE活动 – JohnFx