powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как оптимизировать запрос
5 сообщений из 5, страница 1 из 1
Как оптимизировать запрос
    #39318484
Есть запрос такого вида:
Код: plsql
1.
2.
3.
4.
5.
6.
select *
from   dict_table dt
where  exists (select null
        from   (select *
                from   hard_view) t
        where  t.dict_id = dt.dict_id)



Запрос
Код: plsql
1.
select *  from   hard_view


отрабатывает быстро, менее секунды

В табличке dict_table всего 3 записи

Основной запрос выполняется больше 10 минут

По определенным причинам полностью переписывать запрос я не могу, можно добавлять хинты

Как можно заставить оптимизатор выполнить подзапрос "как есть", сделать из него временную таблицу и дальше юзать эту временную таблицу для каждой строки справочника? Пробовал так:

Код: plsql
1.
2.
3.
4.
5.
6.
select *
from   dict_table dt
where  exists (select null
        from   (select /*+ materialize */  *
                from   hard_view) t
        where  t.dict_id = dt.dict_id)



Не катит, то ли утки высоко летали, то ли мы собак низко подбрасывали ничего не меняется

Юзер план не может посмотреть, потому как нет грантов на таблички внутри вьюхи
...
Рейтинг: 0 / 0
Как оптимизировать запрос
    #39318506
K790
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Быдло____кодер,

а почему сразу не написать?
Код: plsql
1.
2.
3.
4.
select *
from   dict_table dt
where  exists (select null
                from   hard_view t where t.dict_id = dt.dict_id)
...
Рейтинг: 0 / 0
Как оптимизировать запрос
    #39318571
Быдло____кодер,

ну, так-то тебе больше в сторону UNNEST / NO_UNNEST смотреть нужно, а не в сторону /*+ materialize */ , который, кстати, применим только к WITH-subquery
...
Рейтинг: 0 / 0
Как оптимизировать запрос
    #39318666
Посмотрел под другим юзером план, он в обоих случах (с хинтом и без) не делает объединение подзапроса с основным запросом, но зараза план выполнения подзапроса без ничего и в связке с основным запросом отличается (с основным запросом он все таблички по очереди выстраивает и делает hash join / nested loop, не удивительно что такая операция занимает дофига времени)
Можно как то заставить оптимизатор строить план для подзапроса не оглядываясь на основной запрос?

K790 а почему сразу не написать?
Запрос динамически генерируется клиентом, и в реальности намного сложнее,
переделывать механизм его формирования напряжно
...
Рейтинг: 0 / 0
Как оптимизировать запрос
    #39318777
Melkomyagkii_newbi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Быдло____кодерМожно как то заставить оптимизатор строить план для подзапроса не оглядываясь на основной запрос?


В твоем случае можно просто хинты в подзапрос ставить, раз он и так не аннестится. Либо qb_name и в теле основного запроса.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как оптимизировать запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]