Проблема обрезки разделов - PullRequest
0 голосов
/ 23 мая 2018

Я присоединяюсь к 2 таблицам.Сокращение происходит в таблице 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 голосов
/ 23 мая 2018

Без дополнительных данных трудно сказать наверняка, в чем может быть проблема.Я переписал запрос для ясности, и с простой схемой тестирования я получаю сокращение для обеих таблиц с 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;

Обязательно соберите статистику для всех трех таблиц!Часто, когда оптимизатор кажется глупым, это происходит потому, что статистика отсутствует или не обновлена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...