Sql server 通过消除视图简化SQL Server查询

Sql server 通过消除视图简化SQL Server查询,sql-server,subquery,views,query-optimization,simplification,Sql Server,Subquery,Views,Query Optimization,Simplification,我目前正在处理一个非常复杂的视图,该视图从其他几个视图检索数据。我担心如果有人更改我的一个源代码视图,我的查询将停止工作 有没有一种方法可以让SQL Server为我提供一个获得相同结果但使用源表(而不是视图)的查询,从而消除对中间视图的需要,并通过省略冗余联接来提高性能?没有。。。。 你得有个变通办法 我建议您复制必须使用的视图并使用新名称创建它们,在您创建的视图定义的“注释和历史记录”部分中指出“请勿更改”。在SQL server management studio的“设计”视图中查看视图代

我目前正在处理一个非常复杂的视图,该视图从其他几个视图检索数据。我担心如果有人更改我的一个源代码视图,我的查询将停止工作

有没有一种方法可以让SQL Server为我提供一个获得相同结果但使用源表(而不是视图)的查询,从而消除对中间视图的需要,并通过省略冗余联接来提高性能?

没有。。。。 你得有个变通办法


我建议您复制必须使用的视图并使用新名称创建它们,在您创建的视图定义的“注释和历史记录”部分中指出“请勿更改”

在SQL server management studio的“设计”视图中查看视图代码。 复制SQL代码并将视图的select输出分配到SQL存储过程中的临时表中。现在您在SP中有了一个副本,不需要依赖于视图

根据我的经验,我发现视图通常具有冗余/重复的数据列,这些数据列需要复杂的计算,而使用这些视图的所有对象通常不需要这些数据列

另外,通过删除嵌套,您将获得性能增益


或者,如果您不担心性能,也可以复制视图并以不同的方式对其进行标记。

为了避免破坏对基础视图的更改,您可以指定
WITH SCHEMABINDING
选项。这将确保在不按照正确的依赖顺序重新创建视图的情况下,无法更改依赖视图

我不知道有什么工具可以将嵌套视图重构为单个嵌套视图或查询。理想情况下,SQLServer优化器将对现有嵌套视图进行所需的优化,但在某些情况下,它目前的优化效果很差

我建议您首先进行最外面的视图查询,并用派生表替换每个引用的视图,然后根据需要进行嵌套。这将导致一个非常难看的查询,然后您可以重构它,直到性能足够

“有没有办法让SQL Server向我提供查询…”

不。据我所知,为您神奇地生成组合SQL是不可用的


但是没有什么可以阻止您在新视图中使用其他视图的sql。您可能会发现更多的机会以这种方式进行优化。

嵌套视图对于我们和优化器来说更难理解和调试,您说的“有办法”是什么意思?这叫做写代码。我错过什么了吗?