我加入了两张桌子。修剪发生在表1上,但不在表2上,即使存在外连接。
示例:
select *
from table1 t1, table2 t2
where t1.sk in (select sk from filter_table)
and t2.sk(+) = t1.sk
当我检查计划并注意到t1表有KEY分区扫描,但T2正在扫描所有分区(~4500)。因此查询需要超过4小时才能获得50个回复。
有没有办法强制修剪表2?
我正在使用Oracle 11g。
答案 0 :(得分:0)
如果没有更多数据,很难确定问题是什么。为了清晰起见,我重写了查询,并使用简单的测试模式,我使用Oracle 12c修剪了两个表(我没有11g方便)。第一个是密钥,第二个是Bloom Filter(计划中的BF0000)。
select t1.*, t2.*
from filter_table ft
join table1 t1 on t1.sk = ft.sk
left outer join table2 t2 on t2.sk = ft.sk;
务必收集所有三张桌子的统计数据!通常,当优化器看起来很愚蠢时,这是因为统计信息丢失或不是最新的。