почему мой запрос занимает много времени, хотя главная таблица пуста? - PullRequest
0 голосов
/ 03 апреля 2019

Мой запрос выглядит так:

Select 
...
...
...
from
main_table m
inner join x on x.id=m.id
inner join y on y.id=m.id
left outer join z on z.id=m.id
left outer join t on t.id=m.id
where m.date_col=to_date('20200101','yyyymmdd');

запрос занимает 1 минуту.Но результат пуст.

Как я могу получить его быстрее.

select 
...
...
...
from
  main_table m 
    where m.date_col=to_date('20200101','yyyymmdd');

этот запрос занимает 3 секунды.

заранее спасибо

1 Ответ

0 голосов
/ 03 апреля 2019

Чтобы лучше понять «почему», хотелось бы, чтобы выходные данные плана объяснения видели шаблоны доступа и выбор операций объединения, которые сделал Oracle.Тот факт, что ваш набор результатов пуст, не означает, что каждая из соединенных таблиц есть.Я предполагаю, что некоторые из объединяемых таблиц могут иметь некоторый размер, и шаблон доступа может подходить или не подходить так же, как и варианты объединения.Например, может быть, вторая таблица x достаточно велика, и Oracle полностью сканирует ее и использует хеш-соединение.После этого все соединенные строки не совпадают, поэтому возвращается 0 строк.Может быть, должен быть индекс по столбцам, а может и нет.Опять же это зависит от строк и блоков.Если не х, возможно у большой с тем же сценарием.Суть в том, что результат пустой, но я предполагаю, что x или y имеют несколько строк, но не совпадают со строками, в результате чего запрос занимает некоторое время.Без плана объяснения действительно сложно сказать.После просмотра можно было бы порекомендовать оптимизацию.

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