使用大量 UNION 执行视图时出错
Posted
技术标签:
【中文标题】使用大量 UNION 执行视图时出错【英文标题】:Error executing view with massive UNIONs 【发布时间】: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 个视图,似乎还有其他一些严重的架构问题。 是的,问题是视图位于多个数据库中,我无法从其他数据库中引用动态对象。 我无法从其他数据库中引用动态对象为什么? 【参考方案1】:是的,你可以。你必须重新设计你的架构。 Sql Server 的资源有限,从 300 个视图中选择是一个非常荒谬的数量。
没有ifs、buts或maybes,这样的配置将继续困扰你,直到你有,这里没有人能帮助你。
【讨论】:
问题是我没有创建那个配置,我的目标不是重新定义它。 嗯,这是一个问题,然后他们没有其他人,但你可以解决。鉴于问题在于您的架构,这里没有人可以帮助您。因此,这不是一个符合 Stack Overflow 哲学的问题。以上是关于使用大量 UNION 执行视图时出错的主要内容,如果未能解决你的问题,请参考以下文章