Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Может ли UNION влиять на WITH? / 13 сообщений из 13, страница 1 из 1
26.08.2016, 09:15:31
    #39298374
C00LM4N
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли UNION влиять на WITH?
Имею запрос такой структуры

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
WITH src AS
(
    SELECT ... FROM table t1
    JOIN XMLTABLE(....) xt1 ON ...
    LEFT JOIN table2 t2 ON ...
    LEFT JOIN table3 t3 ON ...
)

SELECT * FROM src
UNION ALL SELECT * FROM src



Я всегда полагал, что WITH выполняется перед выполнением основного запроса и его результаты вообще никак не могут изменяться от того, как он дальше используется.
Если в теле основного запроса оставить только один селект, то все как и должно быть - выдается просто все, что выбралось в WITH.
Если добавить "UNION ALL SELECT * FROM src", то я ожидаю получить просто 2 набора одинаковых строк из WITH, а по факту значения в строках меняются. Т.е. меняются результаты, которые выдает WITH. Например, "LEFT JOIN table3 ..." начинает выдавать другие значения. Если убрать из WITH "JOIN XMLTABLE(....)", то результаты снова становятся такими, какими должны быть. Такое поведение хоть каким-то механизмом описывается?
...
Рейтинг: 0 / 0
26.08.2016, 09:37:51
    #39298390
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли UNION влиять на WITH?
C00LM4NТакое поведение хоть каким-то механизмом описывается?BUG nnnnnnnn
Упрощай, заменяя ANSI на NATIVE.
...
Рейтинг: 0 / 0
26.08.2016, 12:23:39
    #39298518
C00LM4N
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли UNION влиять на WITH?
(+) ничего не изменил, к сожалению
...
Рейтинг: 0 / 0
26.08.2016, 12:36:20
    #39298531
C00LM4N
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли UNION влиять на WITH?
Еще нашел странность
Как писал выше, без UNION запрос выдает верные данные.
Но если при этом добавить /*+ MATERIALIZE */ в WITH, то данные становятся такими же кривыми, как и с UNION.
Могу догадываться, что при использовании UNION субд без хинта выполняет материализацию.
Тогда вопрос - каким макаром она может влиять на результаты внутри WITH?
...
Рейтинг: 0 / 0
26.08.2016, 12:38:15
    #39298533
orawish
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли UNION влиять на WITH?
C00LM4N(+) ничего не изменил, к сожалению
хинт materialize даст вам это:
Я всегда полагал, что WITH выполняется перед выполнением основного запроса
но от чудес ansi синтаксиса внутри with кляузы (и снаружи) гарантий н э т
...
Рейтинг: 0 / 0
26.08.2016, 12:52:56
    #39298547
C00LM4N
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли UNION влиять на WITH?
Посмотрел по плану запроса. Действительно, с /*+ MATERIALIZE */ и одним простым селектом план запроса почти такой же, как и без /*+ MATERIALIZE */, но с UNION. Т.е. при добавлении UNION субд делает материализацию, видать оптимизация такая. Соответственно, кост при правильных результатах без материализации ~4500, а при неправильных с явной или неявной материализацией - ~46000.
Вопрос - можно ли заставить не делать материализацию, раз она каким-то макаром гадит?
...
Рейтинг: 0 / 0
26.08.2016, 13:30:26
    #39298578
arlx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли UNION влиять на WITH?
C00LM4NВопрос - можно ли заставить не делать материализацию, раз она каким-то макаром гадит?

хинт inline
...
Рейтинг: 0 / 0
26.08.2016, 17:10:36
    #39298751
C00LM4N
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли UNION влиять на WITH?
Нагуглил быстрее )
Действительно, проблема уходит при добавлении данного хинта.
Но запрос выполняется даже на не слишком большой базе теперь раз в 10 дольше. Похоже, без хранилища все это будет малоюзабельно (
Остается только пробовать на 12 версии, вдруг пофиксили.
...
Рейтинг: 0 / 0
26.08.2016, 18:56:20
    #39298814
Melkomyagkii_newbi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли UNION влиять на WITH?
C00LM4NНагуглил быстрее )
Действительно, проблема уходит при добавлении данного хинта.
Но запрос выполняется даже на не слишком большой базе теперь раз в 10 дольше. Похоже, без хранилища все это будет малоюзабельно (
Остается только пробовать на 12 версии, вдруг пофиксили.

Еще можно попробовать подбить план подзапроса к тому, где результаты правильные и оставить материализацию.. Скорее всего ведь не во время материализации данные портятся, а до.
...
Рейтинг: 0 / 0
26.08.2016, 19:37:19
    #39298834
C00LM4N
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли UNION влиять на WITH?
Спасибо за идею.
Там запрос на 2000 строк. Умру сравнивать )) Если уж только совсем никак иначе.
...
Рейтинг: 0 / 0
26.08.2016, 20:38:49
    #39298849
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли UNION влиять на WITH?
C00LM4NТам запрос на 2000 строкБыдло-индусо-код? Или EAV, отягощённый неструктурированным XML-ем?
...
Рейтинг: 0 / 0
27.08.2016, 19:36:44
    #39299034
C00LM4N
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли UNION влиять на WITH?
Скорее первое.
Отчет с кучей полей. Под каждое поле свой джоин (с джоинами внутри) со своими фильтрами.
Таблицы одни и те же внутри джоинов, но завязывать поля между собой не рекомендуется, т.к. в любой момент может потребоваться изменить фильтры какого-то из полей.
Но, возможно, я не знаю каких либо шаблонов, которые позволяют делать такие вещи красиво и более оптимизированно?
...
Рейтинг: 0 / 0
28.08.2016, 06:58:40
    #39299098
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли UNION влиять на WITH?
C00LM4NПод каждое поле свой джоин (с джоинами внутри) со своими фильтрами.
Таблицы одни и те же внутри джоиновТаки второе. И за него такая расплата.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Может ли UNION влиять на WITH? / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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