Hierachical Query

名称

层次查询算子

介绍

层次查询算子用于处理窗口函数,窗口函数是在满足某种条件的一系列数据(元组)上执行的特殊函数。

GROUP BY子句可对数据进行分组,但无法投影非分组属性而在实际的使用中会需要投影非分组属性,可使用WindowAgg算子

举例

--清理环境
DROP TABLE EMPLOYEES;

--创建环境
CREATE TABLE EMPLOYEES (employee_id int,last_name char(10), manager_id int);
insert into EMPLOYEES values(101,'Kochhar',100);
insert into EMPLOYEES values(108,'Greenberg',101);
insert into EMPLOYEES values(113,'Popp',108);
insert into EMPLOYEES values(200,'Whalen',101);
insert into EMPLOYEES values(109,'Faviet',108);
insert into EMPLOYEES values(110,'Chen',108);
ANALYZE EMPLOYEES;

EXPLAIN ANALYZE SELECT employee_id, last_name, manager_id,level,
    sys_connect_by_path (last_name,'/')
from EMPLOYEES
    WHERE employee_id>100
    START WITH last_name = 'Kochhar'
    CONNECT BY PRIOR employee_id = manager_id;
                                                 QUERY PLAN
------------------------------------------------------------------------------------------------------------
 Hierachical Query  (cost=0.00..89.92 rows=8192 width=0) (actual time=0.19..0.20 rows=6 loops=1)
   UseHash
   Start With Filter: ("inner".LAST_NAME = 'Kochhar')
   Child Clause: ("outer".EMPLOYEE_ID = "inner".MANAGER_ID)
   Filter: ("subplan".EMPLOYEE_ID > 100)
   ->  Seq Scan on EMPLOYEES  (cost=0.00..89.92 rows=8192 width=22) (actual time=0.02..0.02 rows=6 loops=1)
 Planning Time: 0.15 msec
 Execution Time: 0.28 msec
(8 rows)
  • UseHash 限定条件,使用hash表对节点进行查找
  • Start With Filter 限定条件,开始进行查找的节点
  • Child Clause 限定条件,确定层次关系的条件
  • Filter 限定条件,对结果集进行限定
  • Connect By Filter 限定条件,当语句存在CONNECT BY且不使用Hash表时会使用此限定条件