可获得性
本特性自MogDB 5.0.0版本开始引入。
agg:Aggregate Functions (聚合函数)
特性简介
在实际生产生活中,经常在聚合函数中使用distinct语句对数据先去重然后进行聚集运算,本特性对distinct语句执行性能进行优化。
客户价值
提升聚合函数中distinct查询语句的执行性能,实测场景中性能提升可达3倍以上。
特性描述
对于distinct的实现,在进行聚集计算前,将扫描上来的数据先缓存起来,通过distinct列进行排序,然后只取每个分组的第一行数据进行聚集运算,从而实现数据先过滤后聚集的过程。
上述实现中数据的去重操作采用了排序的方法,而排序操作本身对性能影响很大,如果输出没有排序的要求,单纯进行数据的去重,HashAgg可以快速实现数据去重,并且执行性能要远远优于排序操作,基于此,本特性通过双层agg算子实现distinct操作,底层通过HashAgg先对数据进行去重,上层agg算子再对去重后的数据进行聚集,从而提升执行性能。
特性约束
- distinct并发场景下,性能已做优化,本次性能优化只针对非并发场景。
- 不支持distinct为多列的场景。
示例
MogDB=# CREATE TABLE tb_distinct(a INT, b INT, c INT, d INT, e INT);
CREATE TABLE
MogDB=# EXPLAIN VERBOSE SELECT a, COUNT(DISTINCT b) FROM tb_distinct GROUP BY a;
QUERY PLAN
----------------------------------------------------------------------------------
HashAggregate (cost=41.59..43.59 rows=200 width=24)
Output: a, count(b)
Group By Key: tb_distinct.a
-> HashAggregate (cost=38.59..40.59 rows=200 width=16)
Output: a, b
Group By Key: tb_distinct.a, tb_distinct.b
-> Seq Scan on public.tb_distinct (cost=0.00..26.34 rows=1634 width=8)
Output: a, b
(8 rows)
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




