HashAggregate¶
名称¶
哈希聚集算子
介绍¶
在表比较大的情况下,排序的代价时比较高的因此常常会选用哈希聚集作为含有GROUP BY语句的聚集方式。
与朴素聚集不同,哈希聚集会在算子中建立一张哈希表,对数据进行逐行扫描,先计算元组的哈希值并探测哈希表,如果发现记录不存在,则在哈希表中插入一条新记录。
反之,则基于元组和哈希表中的记录进行累计计算并在哈希表上进行更新,最后直接遍历哈希表进行处理,逐行输出最后的聚集结果。
举例¶
--清理环境
DROP TABLE t1 CASCADE;
--创建环境
CREATE TABLE t1(a int);
INSERT INTO t1 SELECT generate_series(1,10);
ANALYZE t1;
EXPLAIN ANALYZE SELECT DISTINCT a FROM t1;
QUERY PLAN
--------------------------------------------------------------------------------------------------
HashAggregate (cost=7.13..7.13 rows=10 width=4) (actual time=0.08..0.09 rows=10 loops=1)
Group Key: A
Batches: 1 Memory Usage: 32 kB
-> Seq Scan on T1 (cost=0.00..7.10 rows=10 width=4) (actual time=0.03..0.04 rows=10 loops=1)
Planning Time: 0.18 msec
Execution Time: 0.28 msec
(6 rows)