2017-08-14 14 views
-3

我们有这个查询,这在多年的工作。SQL查询超时。但是,重命名它的任何索引后

几个月前,它开始给超时。

但是,如果我们重新命名一个索引(为其名称添加一些字符)并再次运行查询,它就会起作用。日复一日,我们也必须这样做。我们每天都会重新命名一个索引,然后再次查询。

有什么问题?我们如何解决这个问题?重命名索引如何解决超时问题?

+1

请编辑您的问题以提供更多信息:表结构,索引声明,表格统计信息,问题查询 – Scoots

+0

问题是,为什么重命名索引可能会影响超出查询的时间。这实际上是一个我们正在运行的存储过程(1000行) –

+0

我的猜测是?您的索引效果不佳,查询计划得到缓存。由于您重命名了索引,因此下次运行查询时计划很可能会发生更改。然后再次缓存下一次运行。您是否尝试使用RECOMPILE进行故障诊断或查看执行计划或除重命名索引之外的任何其他事项? –

回答

2

这些症状表明由于参数嗅探,正在使用次优缓存查询计划。重命名索引会使缓存的计划无效,因此在下次使用时会生成新的索引,这对于查询参数值来说是最佳选择。

可以避免参数嗅探,并且可以使用OPTION(RECOMPILE)OPTION(OPTIMZE FOR...)之类的查询提示,如SQL Server documentation中所述。

+0

尝试添加WITH RECOMPILE,没有工作。 –

+0

@ StephenH.Anderson,您是否尝试过'OPTION(RECOMPILE)'查询提示(不要与'WITH RECOMPLE'存储过程选项混淆)? –

+0

我正在运行存储过程。所以我给它添加了WITH RECOMPILE。我怎么能执行存储过程添加选项(重建)我试图执行my_sp NULL选项(重建),但它给了一个错误(我在SQL 2005) –