|
|
|
Может ли UNION влиять на WITH?
|
|||
|---|---|---|---|
|
#18+
Имею запрос такой структуры Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Я всегда полагал, что WITH выполняется перед выполнением основного запроса и его результаты вообще никак не могут изменяться от того, как он дальше используется. Если в теле основного запроса оставить только один селект, то все как и должно быть - выдается просто все, что выбралось в WITH. Если добавить "UNION ALL SELECT * FROM src", то я ожидаю получить просто 2 набора одинаковых строк из WITH, а по факту значения в строках меняются. Т.е. меняются результаты, которые выдает WITH. Например, "LEFT JOIN table3 ..." начинает выдавать другие значения. Если убрать из WITH "JOIN XMLTABLE(....)", то результаты снова становятся такими, какими должны быть. Такое поведение хоть каким-то механизмом описывается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2016, 09:15:31 |
|
||
|
Может ли UNION влиять на WITH?
|
|||
|---|---|---|---|
|
#18+
C00LM4NТакое поведение хоть каким-то механизмом описывается?BUG nnnnnnnn Упрощай, заменяя ANSI на NATIVE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2016, 09:37:51 |
|
||
|
Может ли UNION влиять на WITH?
|
|||
|---|---|---|---|
|
#18+
(+) ничего не изменил, к сожалению ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2016, 12:23:39 |
|
||
|
Может ли UNION влиять на WITH?
|
|||
|---|---|---|---|
|
#18+
Еще нашел странность Как писал выше, без UNION запрос выдает верные данные. Но если при этом добавить /*+ MATERIALIZE */ в WITH, то данные становятся такими же кривыми, как и с UNION. Могу догадываться, что при использовании UNION субд без хинта выполняет материализацию. Тогда вопрос - каким макаром она может влиять на результаты внутри WITH? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2016, 12:36:20 |
|
||
|
Может ли UNION влиять на WITH?
|
|||
|---|---|---|---|
|
#18+
C00LM4N(+) ничего не изменил, к сожалению хинт materialize даст вам это: Я всегда полагал, что WITH выполняется перед выполнением основного запроса но от чудес ansi синтаксиса внутри with кляузы (и снаружи) гарантий н э т ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2016, 12:38:15 |
|
||
|
Может ли UNION влиять на WITH?
|
|||
|---|---|---|---|
|
#18+
Посмотрел по плану запроса. Действительно, с /*+ MATERIALIZE */ и одним простым селектом план запроса почти такой же, как и без /*+ MATERIALIZE */, но с UNION. Т.е. при добавлении UNION субд делает материализацию, видать оптимизация такая. Соответственно, кост при правильных результатах без материализации ~4500, а при неправильных с явной или неявной материализацией - ~46000. Вопрос - можно ли заставить не делать материализацию, раз она каким-то макаром гадит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2016, 12:52:56 |
|
||
|
Может ли UNION влиять на WITH?
|
|||
|---|---|---|---|
|
#18+
C00LM4NВопрос - можно ли заставить не делать материализацию, раз она каким-то макаром гадит? хинт inline ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2016, 13:30:26 |
|
||
|
Может ли UNION влиять на WITH?
|
|||
|---|---|---|---|
|
#18+
Нагуглил быстрее ) Действительно, проблема уходит при добавлении данного хинта. Но запрос выполняется даже на не слишком большой базе теперь раз в 10 дольше. Похоже, без хранилища все это будет малоюзабельно ( Остается только пробовать на 12 версии, вдруг пофиксили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2016, 17:10:36 |
|
||
|
Может ли UNION влиять на WITH?
|
|||
|---|---|---|---|
|
#18+
C00LM4NНагуглил быстрее ) Действительно, проблема уходит при добавлении данного хинта. Но запрос выполняется даже на не слишком большой базе теперь раз в 10 дольше. Похоже, без хранилища все это будет малоюзабельно ( Остается только пробовать на 12 версии, вдруг пофиксили. Еще можно попробовать подбить план подзапроса к тому, где результаты правильные и оставить материализацию.. Скорее всего ведь не во время материализации данные портятся, а до. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2016, 18:56:20 |
|
||
|
Может ли UNION влиять на WITH?
|
|||
|---|---|---|---|
|
#18+
Спасибо за идею. Там запрос на 2000 строк. Умру сравнивать )) Если уж только совсем никак иначе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2016, 19:37:19 |
|
||
|
Может ли UNION влиять на WITH?
|
|||
|---|---|---|---|
|
#18+
C00LM4NТам запрос на 2000 строкБыдло-индусо-код? Или EAV, отягощённый неструктурированным XML-ем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2016, 20:38:49 |
|
||
|
Может ли UNION влиять на WITH?
|
|||
|---|---|---|---|
|
#18+
Скорее первое. Отчет с кучей полей. Под каждое поле свой джоин (с джоинами внутри) со своими фильтрами. Таблицы одни и те же внутри джоинов, но завязывать поля между собой не рекомендуется, т.к. в любой момент может потребоваться изменить фильтры какого-то из полей. Но, возможно, я не знаю каких либо шаблонов, которые позволяют делать такие вещи красиво и более оптимизированно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2016, 19:36:44 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39298518&tid=1887584]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
51ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 339ms |

| 0 / 0 |
