首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >视图是只执行它们需要的联接,还是总是执行所有联接?

问视图是只执行它们需要的联接,还是总是执行所有联接?
EN

Stack Overflow用户
提问于 2010-04-27 03:15:08
回答 3查看 49关注 0票数 1

我在一个oracle DB上。假设我有一个连接到三个表的视图。该视图每个都有两个字段。每个字段只需要三个表中的两个表中的数据。

如果我查询视图并只返回一个字段,视图是仍然连接到三个表,还是只连接到计算字段所需的两个表?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-27 07:21:24

通常情况下,它必须命中三个表。考虑一下

代码语言:javascript
复制
SELECT A.VAL, B.VAL, C.VAL FROM A JOIN B ON A.ID = B.ID JOIN C ON A.ID = C.ID

有可能"A“中的单个ID在B或C中有零个、1个或多个匹配。如果表"C”是空的,视图永远不会返回一行,因此即使只是查询A.VAL或B.VAL,它仍然需要查看"C“中是否有相应的行。

例外情况是,由于强制的引用完整性约束,优化器知道'B‘中的行将始终具有'A’中的父行。在这种情况下,select of B.VAL将不需要实际检查'A‘中父行的存在。下面的article演示了这一点

票数 2
EN

Stack Overflow用户

发布于 2010-04-27 03:15:52

这可能取决于所使用的连接类型。如果它们都是内连接,那么它肯定需要检查所有三个表。

票数 0
EN

Stack Overflow用户

发布于 2010-04-27 07:21:15

通常,数据库引擎将连接所有三个表,以确保获得正确的答案。

Oracle有时会删除其中一个不会更改结果的表。

在下列情况下,可以这样做:

  • 对要删除的表有一个外键约束(即可以保证找到表中的一行)
  • 该表在其他情况下未使用。即不是在where子句中选择,等等。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2716166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档