多视图查询优化

Obs*_*nix 2 sql-server optimization sql-server-2000 view

我们有一个怪物视图,其中包含与许多(许多)表的联接,以便返回所需的数据。在某些情况下,为了获取一列信息,我们必须连接到 4 个表,只是为了获取我们需要的值(数据库结构不是很好,我们无法更改它)。

为了提高性能,我提取了某些组件并将它们构建到自己的视图中,以简化执行计划,并希望优化查询。

如果我编写一个将这些视图连接在一起的查询,我是否会失去每个视图的查询优化的好处?即,我最终会回到开始的地方,将视图组合成单个选择,还是因为它们彼此原子地起作用,所以它本身会表现得更好?

spa*_*dba 5

视图只是存储的查询:您不执行视图,但从SELECT中获取数据。当您组合连接多个视图时,您所做的与在查询中内联视图定义没有什么不同。事实上,这就是优化器所做的:它称为视图扩展。

如果您的视图永远不会单独使用,而是总是连接在一起,我建议您停止单独调整它们,而是专注于将使用它们的整体查询。优化器将扩展视图并生成一个计划,该计划与从各个视图中进行选择时使用的计划无关。

另一方面,使您的个人视图更快的因素(经过深思熟虑的 T-SQL 代码、索引、统计信息)可能不会损害整体查询的性能。只是不要期望最终的计划是各个视图计划的简单合并。