|
Как избежать query rewrite union all -> left join
|
|||
---|---|---|---|
#18+
Здравствуйте, уважаемые участники! Имеется запрос вида Код: plsql 1.
работает он примерно 5 минут. Если запускаю запросы по отдельности Код: plsql 1.
и Код: plsql 1.
то каждый из них работает секунд по 20 Но когда пишу Код: plsql 1. 2. 3.
оракл переписывает запрос так, что план генерируется как для left-join-а. И работает это всё 5 минут. Мой вопрос в том - как "перекрыть" оптимизатору конкретно эту возможность переписывания запроса ? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2021, 20:09 |
|
Как избежать query rewrite union all -> left join
|
|||
---|---|---|---|
#18+
Попробуйте это: NO_QUERY_TRANSFORMATION Hint Код: plaintext
The NO_QUERY_TRANSFORMATION hint instructs the optimizer to skip all query transformations, including but not limited to OR-expansion, view merging, subquery unnesting, star transformation, and materialized view rewrite. For example: Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2021, 22:11 |
|
Как избежать query rewrite union all -> left join
|
|||
---|---|---|---|
#18+
qwerty005 Код: plsql 1. 2. 3.
Код: plsql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2021, 22:19 |
|
Как избежать query rewrite union all -> left join
|
|||
---|---|---|---|
#18+
Elic qwerty005 Код: plsql 1. 2. 3.
Код: plsql 1.
Изначально и был left join, работающий 5 минут. Была поставлена задача оптимизировать, поэтому и была предпринята попытка переписать через union all - вдруг станет быстрее.... И действительно, по отдельности эти запросы работают быстро. Еще забыла сразу написать - tab1 и tab2 - это не таблицы, а CTE ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2021, 23:03 |
|
Как избежать query rewrite union all -> left join
|
|||
---|---|---|---|
#18+
qwerty005 Еще забыла сразу написать - tab1 и tab2 - это не таблицы, а CTE СТЕ - это конечно же Chronic traumatic encephalopathy? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2021, 23:13 |
|
Как избежать query rewrite union all -> left join
|
|||
---|---|---|---|
#18+
qwerty005, без планов судить сложно... Но, возможно, имеет смысл материализовать CTE. Предполагаю, что в запросе с union all СВО так и поступает, чтобы 2 раза одни и теже подзапрсы не крутить. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2021, 00:10 |
|
Как избежать query rewrite union all -> left join
|
|||
---|---|---|---|
#18+
Бельфя qwerty005, без планов судить сложно... Но, возможно, имеет смысл материализовать CTE. Предполагаю, что в запросе с union all СВО так и поступает, чтобы 2 раза одни и теже подзапрсы не крутить. В запросе с left join * ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2021, 00:37 |
|
Как избежать query rewrite union all -> left join
|
|||
---|---|---|---|
#18+
Всем спасибо! Удалось побороть, дублировав один из CTE, немного изменив текст запроса без изменения сути внутри него (добавлением where 1=1 и тд) т.е. примерно так: Код: plsql 1. 2. 3.
где tab3 и tab1 - почти идентичные подзапросы, различающиеся по виду, но не по содержанию ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2021, 00:49 |
|
Как избежать query rewrite union all -> left join
|
|||
---|---|---|---|
#18+
qwerty005 Удалось побороть, дублировав один из CTE Откройте "страшную тайну": что такое CTE? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2021, 01:25 |
|
Как избежать query rewrite union all -> left join
|
|||
---|---|---|---|
#18+
SQL*Plus qwerty005 Удалось побороть, дублировав один из CTE Откройте "страшную тайну": что такое CTE? Common Table Expression ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2021, 10:37 |
|
Как избежать query rewrite union all -> left join
|
|||
---|---|---|---|
#18+
qwerty005 где tab3 и tab1 - почти идентичные подзапросы, различающиеся по виду, но не по содержанию два with неудобно поддерживать если ети условия добавить во второй юнион, всеравно "трансформирует"? ps во второй добавить заведомо истинное условие (rownum>0.5, sign()<2 тощо) .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2021, 10:36 |
|
Как избежать query rewrite union all -> left join
|
|||
---|---|---|---|
#18+
Бельфя SQL*Plus пропущено... Откройте "страшную тайну": что такое CTE? Common Table Expression В документации Oracle Database термина "Common Table Expression" не нашел. Используется понятие WITH Clause. В документации на Oracle MySQL пишут https://docs.oracle.com/cd/E17952_01/mysql-8.0-en/with.html 13.2.15 WITH (Common Table Expressions) A common table expression (CTE) is a named temporary result set that exists within the scope of a single statement and that can be referred to later within that statement, possibly multiple times. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2021, 10:48 |
|
Как избежать query rewrite union all -> left join
|
|||
---|---|---|---|
#18+
SQL*Plus В документации Oracle Database термина "Common Table Expression" не нашел. Это общий термин из стандарта SQL:1999 и в документацию он уже попал: 12.6.3 Polymorphic Table Function Invocation 12.6.3 Polymorphic Table Function Invocation Код: plsql 1. 2. 3.
The input table argument must be a basic table name. The name resolution rules of the table identifier are (in priority order) as follows :
... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2021, 15:32 |
|
Как избежать query rewrite union all -> left join
|
|||
---|---|---|---|
#18+
Sayan Malakshinov SQL*Plus В документации Oracle Database термина "Common Table Expression" не нашел. Это общий термин из стандарта SQL:1999 и в документацию он уже попал: 12.6.3 Polymorphic Table Function Invocation 12.6.3 Polymorphic Table Function Invocation Код: plsql 1. 2. 3.
The input table argument must be a basic table name. The name resolution rules of the table identifier are (in priority order) as follows :
Это очень косвенное косвенное упоминание приведено ТОЛЬКО в документе "Database PL/SQL Language Reference" https://docs.oracle.com/en/database/oracle/oracle-database/19/lnpls/plsql-optimization-and-tuning.html В руководстве по языку SQL ничего такого нет. А могли бы дать явное определение и привести свою терминологию к стандарту. Сами такие стандарты мало, кто читает, кроме разработчиков таких стандартов и разработчиков СУБД. Лично за почти 28 лет использования SQL ни разу не читал ни одного стандарта по языку SQL, поскольку это вряд ли чем-то могло помочь в конкретной работе. Спасибо за найденный контекст! ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2021, 19:51 |
|
|
start [/forum/topic.php?desktop=1&fid=52&tid=1879713]: |
0ms |
get settings: |
25ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
54ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
294ms |
get tp. blocked users: |
2ms |
others: | 2661ms |
total: | 3069ms |
0 / 0 |