Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / select from where in (select ....) / 7 сообщений из 7, страница 1 из 1
24.09.2018, 17:54
    #39707227
flint1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select from where in (select ....)
добрый день.

Есть запрос (очень долго отрабатывает , почти 7 минут)
SELECT * FROM V_ВЬЮХА WHERE (ID$ IN (SELECT ID FROM DOCUMENT WHERE Условие)
по плану лезет в разные места делает фулсканы на больших таблицах...

Внутренний запрос (SELECT ID FROM DOCUMENT WHERE Условие) отрабатывает доли секунды, выдаёт 5 айдишников ...

А если эти 5 айдишников вставить в IN ('1234', '5473', '78432', '654', '87' ) вместо селелкта, то изначальный запрос очень быстро отрабатывает, в плане бежит по индексам, нет фулсканов, отрабатывает менее секунды и всё хорошо.

как перестроить изначальный запрос? во внутреннем запросе условие формируется по диапазону дат
...
Рейтинг: 0 / 0
24.09.2018, 18:04
    #39707238
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select from where in (select ....)
flint1,

1) матерелизовать подзапрос (мож + hint cardinality)
2) если ид уникальные наоборот вместо ин - джоин

....
stax
...
Рейтинг: 0 / 0
24.09.2018, 18:15
    #39707241
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select from where in (select ....)
flint1,

ищите кандидатов на очередной сезон "битвы экстрасенсов"?

структуры таблиц и типы данных колонок не озвучены, версия сервера не указана, текст представления не приведен, схема индексации базовых таблиц не упомянуты, актуальность статистик неизвестна...
...
Рейтинг: 0 / 0
25.09.2018, 07:25
    #39707388
igaraev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select from where in (select ....)
flint1,
Попробуйте конструкцию with с хинтом matereliaze
...
Рейтинг: 0 / 0
25.09.2018, 08:05
    #39707399
igaraev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select from where in (select ....)
flint1,

Еще если вы точно знаете, что ID шников не более 10 штук будет всегда, попробуйте во внутренний селект добавить условие rownum<11. И если это поможет пересобирете статистику по всем таблицам в запросе.

begin
DBMS_STATS.GATHER_TABLE_STATS (
ownname => '"Владелец"',
tabname => '"Название таблицы"',
estimate_percent => 100
);
end;
...
Рейтинг: 0 / 0
25.09.2018, 09:39
    #39707462
flint1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select from where in (select ....)
Спасибо.
извиняйте, в следующий раз укажу структуру и версию.
айдишников может быть и больше, зависит от диапазона.
а вот с функцией with, боюсь что будет работать как надо.
приду на работу, проверю.
Спасибо ещё раз.
...
Рейтинг: 0 / 0
25.09.2018, 09:59
    #39707481
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select from where in (select ....)
flint1а вот с функцией with, боюсь что будет работать как надо.with может оказаться не более, чем синтаксическим сахаром. Особенно, если оракл не материализует результат его работы во временную таблицу.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / select from where in (select ....) / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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