【发布时间】:2020-01-12 02:52:58
【问题描述】:
我查询由 3 个表构建的视图。主表由一个列连接,在表 A 中它被索引,在表 B 中它是 PK。 该视图具有在条件中使用但未编入索引的附加列。 似乎来自表的简单查询正在使用主键,但也访问了表访问已满的表。 我需要解释为什么会发生这种情况以及如何使它变得更好。 下面示例代码中的 Tabc 非常小,因此预计会被完整访问。
create or replace view v_per_pda
as select cola, colb, case when colc = 51 then colc else 0 end decd
from taba, tabb, tabc
where taba.id = tabb.id
and tabb.cold = 1
and taba.id2 = tabc.id2
在下面的解释计划中你可以看到: taba 是通过索引范围扫描访问 & tabb 是通过主键访问 下面完整的表访问与表b有关。 为什么 oracle 使用这个?
【问题讨论】:
-
为了清楚起见,解释计划中的 tabc 也被索引范围扫描访问。底部的。
-
请将执行计划以文本形式发布,包括表名和谓词。详情请见here。
-
我按照你的要求做了,但它给了我一个不同的执行计划。我想重新检查一下。