暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MogDB 聚合函数distinct性能优化

原创 MogDB 2024-08-06
219

可获得性

本特性自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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论