由于错误的计划或碎片索引,MS SQL查询速度很慢

时间:2014-04-29 10:40:12

标签: sql-server performance indexing fragmentation maintenance-plan

我有一个存储过程,通常运行得非常快(几秒钟),但是有一些奇怪的日子,具有相同参数的相同proc需要几分钟才能执行。但是如果我在这一点上对索引进行碎片整理,它会在几秒钟内开始运行。

这可能是因为执行计划不好或索引碎片?

如果是这样,有没有办法让这个程序不依赖于执行计划或碎片索引?

提前致谢, 约瑟夫

2 个答案:

答案 0 :(得分:4)

那么,根据您的SP,解决方案可能是通过这些选项:

1 / WITH RECOMPILE可以节省您的一天。这会通过重新编译SP来增加总执行时间,但它可以确保您拥有最佳的执行计划。

2 / KEEPFIXED PLAN也可以是一种选择。

3 /如果您有一组参数"代表性"那么值得尝试一下OPTIMIZE FOR。从统计学的角度来看。

4 /监控所涉及的表和索引的碎片级别。检查是否存在大量更新SP使用的表的语句。如果是,update statisticsUPDATE STATISTICS <tablename>;

5 /参数嗅探也可能是一个根本原因。

您可以进一步了解详情并查看list of causes of recompilations

答案 1 :(得分:0)

简答:不。 SQL Server依赖于执行计划和索引来表现良好。

更长的答案:也许吧。如果在对索引进行碎片整理后性能会立即提高,那么我的第一个问题是:哪些索引,以及它们为什么会碎片化?你是否在一个uniqueidentifier上聚类?您的统计信息是最新的吗?执行计划是什么样的?