Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 查询查询?_Sql Server_Database - Fatal编程技术网

Sql server 查询查询?

Sql server 查询查询?,sql-server,database,Sql Server,Database,假设我有五个表,分别是table1、table2。。。表5。 通过连接表1、2和3,我已经创建了一个名为query1的视图/查询 现在,我想创建一个视图,它需要连接所有五个表。我的问题是,使用query1并将表4和表5连接到其中是好的,还是将五个表逐个连接起来更好 我担心,如果我连接两个视图,或者一个视图和一个表,那么修改同一个视图需要重建整个查询,因为它依赖于该视图。请随意操作 查询优化器将分析代码并构建相同的执行计划。如果您不希望查询依赖于某个视图,那么您必须问问自己,为什么要首先创建该视图

假设我有五个表,分别是table1、table2。。。表5。 通过连接表1、2和3,我已经创建了一个名为query1的视图/查询

现在,我想创建一个视图,它需要连接所有五个表。我的问题是,使用query1并将表4和表5连接到其中是好的,还是将五个表逐个连接起来更好

我担心,如果我连接两个视图,或者一个视图和一个表,那么修改同一个视图需要重建整个查询,因为它依赖于该视图。

请随意操作


查询优化器将分析代码并构建相同的执行计划。

如果您不希望查询依赖于某个视图,那么您必须问问自己,为什么要首先创建该视图

如果您的5表查询连接
table1
table2
table3
的方式恰好与
query1
视图中相同表的连接方式相同,但实际上具有完全不同的含义,那么,在我看来,在第二个视图/查询中不使用
query1
是非常好的

但是,如果您的第二个视图/查询要复制已在
query1
中实现的相同业务规则,那么我认为完全没有必要复制代码。这部分是一种观点:通过创建它,如果需要多次使用相同的代码,可以避免重复。当您更改
query1
时,其他相关查询和/或视图相应地更改其输出是有意义的

当然,有时视图中的更改需要更改使用它的其他查询和/或视图。如果这是您目前最关心的问题,那么我建议您在适当规划视图方面投入时间,以减少在数据库长期使用后发生此类更改的可能性


因此,基本上,您的选择是在每个视图中复制逻辑,以避免它们相互依赖,或者在必要时积极使用您的视图,但可能会遇到这样的情况,即您必须仅因为某个特定视图需要更改而进行一系列更改。但是,正如我前面所说,如果你事先正确地设计你的观点,你可以将风险降到最低。

我对事先计划的想法印象最深。我认为,这是我之前想隐藏的问题。但是,如果第二个qwuery将成为一个视图,则应该重新创建代码。调用CIEW的视图是数据库性能不佳的原因之一。维护它们也是非常痛苦的,人们发现最好在顶部添加另一个视图,而不是通过链来确定哪个视图需要更改。最终,您可能会加入同一个表15次,并生成数百万条记录,从而得到一个3的结果集。我从应用程序开发的痛苦经历中得知这一点,尽管这是一个好主意。永远不要使用视图来调用视图。@HLGEM:并不是每个视图调用一个视图都是从性能角度来看的问题。是的,那些导致一组表多次自连接的表可能会导致性能问题,但我认为这也是好的规划(或者至少是对现有代码库的正确分析)应该发挥作用的地方。如果不是这种情况(即多个自联接),嵌套视图在性能方面是非常好的。(至于筑巢本身产生的问题,我相信我在回答中已经提到了。)