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

相关推荐
步步为营DotNet5 小时前
深入理解IAsyncEnumerable:异步迭代的底层实现与应用优化
java·服务器·数据库
数据库学啊5 小时前
专业的国产时序数据库公司
数据库·时序数据库
黑客思维者5 小时前
突破 Python 多线程限制:GIL 问题的 4 种实战解法
服务器·数据库·python·gil
l1t5 小时前
利用Duckdb求解Advent of Code 2025第5题 自助餐厅
数据库·sql·mysql·算法·oracle·duckdb·advent of code
驾数者5 小时前
Flink SQL关联查询:双流Join与维表Join实战技巧
数据库·sql·flink
njsgcs5 小时前
solidworks 二次开发 获取样条曲线bcurve的控制点
数据库
一 乐5 小时前
智慧养老|基于springboot+小程序社区养老保障系统设计与实现(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·后端·小程序
罗光记6 小时前
Solon AI 开发学习 7-chat - 四种消息类型及提示语增强
数据库·其他·百度·facebook·新浪微博
煎蛋学姐6 小时前
SSM社区志愿者服务系统d6d36(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·社区志愿者服务系统