|
|
|
Подхватить индексы, используя OR
|
|||
|---|---|---|---|
|
#18+
Упрощенно есть запрос к вьюшке с Код: plsql 1. 2. 3. План выдает фулскан и длится оч долго. Но при этом на таблице вьюшке есть индексы по f1, по f2 и по f3 и если запрос разбить на 3 части через union all, то каждый индекс подхватывается и запрос выполняется меньше чем за секунду. Но надо то же самое сделать в одном запросе через OR, ибо в рекурсивном варианте юнион не прокатывает: Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2016, 10:11 |
|
||
|
Подхватить индексы, используя OR
|
|||
|---|---|---|---|
|
#18+
BrahmaputrUNION ALL operation in recursive WITH clause must have only two brancheswith t as (( ... union ... union ... )) ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2016, 10:14 |
|
||
|
Подхватить индексы, используя OR
|
|||
|---|---|---|---|
|
#18+
use_concat, не понял. Вот например Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Как переписать его, разбив OR на юнион? Делать три вложенных рекурсивных запроса? Не вариант. Мне бы просто подхватить индексы ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2016, 10:26 |
|
||
|
Подхватить индексы, используя OR
|
|||
|---|---|---|---|
|
#18+
Brahmaputr, 1. Версия 2. Статистика ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2016, 10:34 |
|
||
|
Подхватить индексы, используя OR
|
|||
|---|---|---|---|
|
#18+
AlexFF__, 11.2, собрана. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2016, 10:39 |
|
||
|
Подхватить индексы, используя OR
|
|||
|---|---|---|---|
|
#18+
BrahmaputrAlexFF__, 11.2, собрана. Если хочешь разобраться, то смотри план. Или просто попробуй hint use_concat ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2016, 10:44 |
|
||
|
Подхватить индексы, используя OR
|
|||
|---|---|---|---|
|
#18+
Brahmaputr, Кроме предложенного use_concat (не факт, что он сработает в рекурсивном члене, но попробовать можно) еще можно 1) развернуть набор данных (unpivot) и вообще уйти от соединения по OR (если специфика позволяет - более одного условия не срабатывает для одной строки) 2) перейти на MSSQL. Там нет такого нелепого ограничения. 3) сделать цикл на PL/SQL. Скорее всего это будет еще быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2016, 12:38 |
|
||
|
Подхватить индексы, используя OR
|
|||
|---|---|---|---|
|
#18+
Brahmaputr, для комбинирования индексов есть хинты and_equal, index_join и index_combine вероятно, вас должны интересовать and_equal и index_combine ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2016, 13:50 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39321690&tid=1887307]: |
0ms |
get settings: |
7ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
179ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
| others: | 240ms |
| total: | 536ms |

| 0 / 0 |
