我有一个运行在SQL Server 2008上的相当复杂(或丑陋的外观,取决于您的外观)。它在具有pk表和fk表的 View 上基于许多逻辑。 fk表与pk表的连接略微超过了30次(fk表的设计很差-它使用了我需要弄平的名称值对。不幸的是,这是第3方,我无法更改它)。

无论如何,它已经运行了好几个星期,直到我定期注意到运行需要3-5分钟。事实证明,这是生成查询计划所需的时间。一旦查询计划存在并被缓存,存储过程本身将非常高效地运行。事情运行得很顺利,直到有理由重新生成并再次缓存查询计划。

有人看过吗?为什么要花这么长时间制定计划?有什么方法可以使它更快地制定计划?

最佳答案

由于某种原因,该计划需要重新编译,例如统计信息更新或DDL更改。
列表在这里:Execution Plan Caching and Reuse

当前形式的查询将始终需要3-5分钟才能重新编译:这是无法避免的。

假设您不能更改它(PIVOT,使用触发器维护“适当的”表等),那么您只能控制重新编译的时间。

雷木思的计划指南答案是一种方法。我还要查看我的统计数据维护并确保它在一夜之间完成,因此它仅在一天开始时发生一次

10-06 13:46
查看更多