Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
EXPLAIN PLAN FOR
SELECT *
FROM object
WHERE type = 'city'
START WITH id = 1 CONNECT BY PRIOR id = parent_id;
---------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 5 | 825 | 4 (25)| 00:00:01 |
|* 1 | FILTER | | | | | |
|* 2 | CONNECT BY NO FILTERING WITH START-WITH| | | | | |
| 3 | TABLE ACCESS FULL | OBJECT | 5 | 825 | 3 (0)| 00:00:01 |
---------------------------------------------------------------------------------------------------
EXPLAIN PLAN FOR
SELECT *
FROM object
WHERE type = 'country'
START WITH id = 5 CONNECT BY PRIOR parent_id = id;
--------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 2 | 330 | 7 (29)| 00:00:01 |
|* 1 | FILTER | | | | | |
|* 2 | CONNECT BY WITH FILTERING | | | | | |
| 3 | TABLE ACCESS BY INDEX ROWID | OBJECT | 1 | 165 | 2 (0)| 00:00:01 |
|* 4 | INDEX UNIQUE SCAN | PK_OBJECT | 1 | | 1 (0)| 00:00:01 |
| 5 | NESTED LOOPS | | 1 | 178 | 3 (0)| 00:00:01 |
| 6 | CONNECT BY PUMP | | | | | |
| 7 | TABLE ACCESS BY INDEX ROWID| OBJECT | 1 | 165 | 1 (0)| 00:00:01 |
|* 8 | INDEX UNIQUE SCAN | PK_OBJECT | 1 | | 0 (0)| 00:00:01 |
--------------------------------------------------------------------------------------------
EXPLAIN PLAN FOR
SELECT *
FROM object_fast
WHERE parent_id = 1 AND object_type = 'city';
-------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 2 | 660 | 2 (0)| 00:00:01 |
|* 1 | MAT_VIEW ACCESS BY INDEX ROWID| OBJECT_FAST | 2 | 660 | 2 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | OBJECT_FAST_OBJ_TYPE | 6 | | 1 (0)| 00:00:01 |
-------------------------------------------------------------------------------------------------------
EXPLAIN PLAN FOR
SELECT *
FROM object_fast
WHERE object_id = 5 AND parent_type = 'country';
-----------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 330 | 2 (0)| 00:00:01 |
|* 1 | MAT_VIEW ACCESS BY INDEX ROWID| OBJECT_FAST | 1 | 330 | 2 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | OBJECT_FAST_OBJ_ID | 3 | | 1 (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------------
select
id
,type
,name
,parent_id
,prior type parent_type
,prior name parent_name
,level nesting_level
from object o
start with parent_id is null
connect by PRIOR id = parent_id;
select
connect_by_root id as object_id
,connect_by_root name as object_name
,connect_by_root type as object_type
,id as parent_id
,name as parent_name
,type as parent_type
,level-1 as nesting_level
from object o
connect by PRIOR parent_id = id
order by id, nesting_level
Денормализация деревьев