таблицы:Force Oracle использовать фильтрацию в START WITH извне запроса
create table Tree
(node varchar2(20),
parentNode varchar2(20),
val number);
create index idx_tree_01 on Tree
(node);
create index idx_tree_02 on Tree
(parentnode);
Образец данных:
Insert into TREE (NODE,PARENTNODE,VAL) values ('2','1',2);
Insert into TREE (NODE,PARENTNODE,VAL) values ('3','2',3);
Insert into TREE (NODE,PARENTNODE,VAL) values ('4','2',3);
Insert into TREE (NODE,PARENTNODE,VAL) values ('5','4',1);
Insert into TREE (NODE,PARENTNODE,VAL) values ('6','3',1);
Посмотреть определение:
create view tree_view as
select connect_by_root parentnode as firstNode,
lpad(' ', 2 * level - 2, ' ') || val as MyVal,
node, parentNode
from tree
start with parentnode in (select parentnode from tree)
connect by parentnode = prior node
Теперь я хочу, чтобы выполнить запрос:
select * from tree_view
where firstNode = '1'
План выполнения запроса является:
-------------------------------------------------------------------------
| Id | Operation | Name | E-Rows |
-------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | |
|* 1 | VIEW | TREE_VIEW | 5 |
|* 2 | CONNECT BY NO FILTERING WITH START-WITH| | |
| 3 | TABLE ACCESS FULL | TREE | 5 |
|* 4 | INDEX RANGE SCAN | IDX_TREE_02 | 1 |
-------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("FIRSTNODE"='1')
2 - access("PARENTNODE"=PRIOR NULL)
filter(IS NOT NULL)
4 - access("PARENTNODE"=:B1)
Как вы можете видеть, что filterfirstnode = '1'
используется в конце. Я хочу, чтобы это использовалось как первое.
I НЕ МОЖЕТ изменить вид (могу добавить только некоторые подсказки).
Как я могу дать указание Oracle использовать значение firstNode в START WITH? Это обеспечит отличное улучшение производительности.
My real "tree" table - это пара таблиц и объем данных огромен. Как я уже говорил, я не могу изменить представление.
Не предлагать мне:
- функции с параметром firstnode и конвейерными результате
- изменения зрения использования контекста сеанса в начале с
- временной таблицей queering в начале с
- и т.д.
Вид должен быть таким же. Подсказки разрешены.
@PavelGatnar Я бы не спросить здесь, когда будет такая возможность. Проект вживую - большие изменения не допускаются. – dcieslak
Это просто образец. В реальности есть результат из какой-то другой таблицы. Обратите внимание, что мой вопрос заключается в том, как перенести фильтрацию в START WITH из-за запроса. – dcieslak