假设我有五个名为 table1、table2 ... table5 的表。我已经通过加入 table1、2 和 3 创建了一个名为 query1 的视图/查询。
现在,我想创建一个需要连接所有五个表的视图。我的问题是,使用query1并将table4和table5加入其中是否更好,或者将五个表一张一张加入更好?
恐怕如果我加入两个视图,或者一个视图和一个表/s,那么修改同一个视图需要我重建整个查询,因为它依赖于该视图。
假设我有五个名为 table1、table2 ... table5 的表。我已经通过加入 table1、2 和 3 创建了一个名为 query1 的视图/查询。
现在,我想创建一个需要连接所有五个表的视图。我的问题是,使用query1并将table4和table5加入其中是否更好,或者将五个表一张一张加入更好?
恐怕如果我加入两个视图,或者一个视图和一个表/s,那么修改同一个视图需要我重建整个查询,因为它依赖于该视图。
如果您不希望您的查询依赖于视图,那么您必须问自己,为什么要首先创建该视图。
如果您的 5 表查询 join table1
,table2
并且只是恰好与视图中相同表的联接table3
方式相同,但实际上具有完全不同的含义,那么在我看来,不在您的第二个视图/查询中使用。query1
query1
但是,如果您的第二个视图/查询将重现已在 中实现的相同业务规则query1
,那么我认为复制代码绝对没有意义。这部分是一种观点:通过创建它,如果需要多次使用相同的代码,您可以避免重复。当您更改query1
时,其他相关查询和/或视图相应地更改其输出是有意义的。
当然,有时视图中的更改需要更改使用它的其他查询和/或视图。如果这是您目前最关心的问题,那么我建议您花时间适当地规划您的视图,以减少在您的数据库长期使用后发生此类更改的可能性。
因此,基本上,您的选择是在每个视图中复制逻辑以避免它们相互依赖,或者在必要时积极使用您的视图,但有可能遇到一种情况,即您必须仅仅因为一个特定视图而进行一系列更改需要改变。但是,正如我之前所说,如果您事先正确设计您的视图,您可以将这种风险降到最低。
随你所愿。
查询优化器将分析代码并构建相同的执行计划。