【发布时间】:2017-06-01 14:35:54
【问题描述】:
我必须执行一个视图 A,它从其他视图 B 中获取数据,该视图由三百个相同类型的视图的 UNION 组成(两个表之间的连接) .当我执行视图 A 时,它会崩溃并显示以下错误:
错误:“查询处理器用尽了内部资源,可以 不产生查询计划。这是一个罕见的事件,只预计 极其复杂的查询或引用非常大的查询 表或分区的数量。请简化查询。如果你 相信您错误地收到了此消息,请联系客户 支持服务了解更多信息。”
由于出现错误,查询执行计划没有生成,但我已经能够为另一个执行生成它。我无法上传查看 A 的执行计划,因为它的权重很大,但您可以在此处查看 B 的执行计划:
https://www.brentozar.com/pastetheplan/?id=S1i7FiTWb
有没有办法避免这个错误?
【问题讨论】:
-
你手上有性能定时炸弹,因为你使用的是嵌套视图。从它的声音来看,它们的嵌套深度越来越深。这是完全破坏优化器生成体面执行计划的能力的可靠方法。说真的....300 次观看???? simple-talk.com/sql/performance/…
-
是的,查询有几个嵌套级别,在一些奇怪但可能的情况下,它可以有 300 个视图。
-
正如我所说的嵌套视图正在杀死你。但是,如果您的查询有多达 300 个视图,似乎还有其他一些严重的架构问题。
-
是的,问题是视图位于多个数据库中,我无法从其他数据库中引用动态对象。
-
我无法从其他数据库中引用动态对象为什么?
标签: sql sql-server query-performance sqlperformance