mysql distinct慢

select a , count(distinct b) cn from t

如果统计是死的或者实时性要求没这么高,那么可以用各种手段做缓存。

如果统计是实时的并且数据量不大,几十万的数据量

Stream API一行式(Java 8+)

css 复制代码
Map<String, Long> result = dataList.stream()
    .collect(Collectors.groupingBy(
        Vo::getA,
        Collectors.mapping(
            Vo::getB,
            Collectors.collectingAndThen(
                Collectors.toSet(),
                Set::size
            )
        )
    ));

并行处理版(大数据量)

css 复制代码
Map<String, Integer> result = dataList.parallelStream()
    .collect(
        Collectors.groupingByConcurrent(
            Vo::getA,
            Collectors.mapping(
                Vo::getB,
                Collectors.toSet()
            )
        )
    )
    .entrySet().stream()
    .collect(Collectors.toMap(
        Map.Entry::getKey,
        e -> e.getValue().size()
    ));

如果要求实时统计数据量又很大,几千万甚至过亿数据量, 上 Elasticsearch

如果要求实时统计数据量更大,过亿甚至接近无限,上Flink

相关推荐
Gofarlic_OMS15 分钟前
应对MathWorks合规审查的专项准备工作
大数据·服务器·网络·数据库·人工智能
七夜zippoe25 分钟前
DolphinDB SQL查询:从基础到进阶
数据库·sql·进阶·聚合·dolphindb
wq_28 分钟前
Mysql-MVCC
mysql·面试
有想法的py工程师37 分钟前
PostgreSQL 深入heap_update() 与 HOT 机制(附源码级解析)
数据库·postgresql
qq_342295822 小时前
如何为容器内多个列表实现统一滚动条.txt
jvm·数据库·python
qq_206901392 小时前
CSS如何引入自适应图标_利用svg外链配合css控制颜色
jvm·数据库·python
weixin_408717772 小时前
Go语言怎么编译Linux程序_Go语言编译Linux可执行文件教程【避坑】
jvm·数据库·python
APIshop3 小时前
Python 爬虫获取京东商品详情 API 接口实战指南
java·服务器·数据库
XmasWu12253 小时前
【Hermes Agent进阶】开发自定义技能
网络·数据库