分区修剪问题

时间:2018-05-23 09:02:39

标签: oracle oracle11g

我加入了两张桌子。修剪发生在表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。

1 个答案:

答案 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;

务必收集所有三张桌子的统计数据!通常,当优化器看起来很愚蠢时,这是因为统计信息丢失或不是最新的。