我在一个oracle DB上。假设我有一个连接到三个表的视图。该视图每个都有两个字段。每个字段只需要三个表中的两个表中的数据。
如果我查询视图并只返回一个字段,视图是仍然连接到三个表,还是只连接到计算字段所需的两个表?
发布于 2010-04-27 07:21:24
通常情况下,它必须命中三个表。考虑一下
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演示了这一点
发布于 2010-04-27 03:15:52
这可能取决于所使用的连接类型。如果它们都是内连接,那么它肯定需要检查所有三个表。
发布于 2010-04-27 07:21:15
通常,数据库引擎将连接所有三个表,以确保获得正确的答案。
Oracle有时会删除其中一个不会更改结果的表。
在下列情况下,可以这样做:
https://stackoverflow.com/questions/2716166
复制相似问题