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

相关推荐
杨云龙UP8 分钟前
PostgreSQL 18.4 数据库整库迁移实战:pg_dump 备份与 pg_restore 恢复完整操作手册
运维·服务器·数据库·postgresql·pg_dump·pg_restore
AOI小白新手上路39 分钟前
autodl常用的tar 打包下载(数据集)命令手册:逐段拆解与套用模板
java·大数据·数据库
凯歌的博客1 小时前
DuckDB 是一款进程内的分析型数据库
数据库·ai编程
dishugj2 小时前
Oracle物理体系结构
数据库·oracle
北亚数据恢复2 小时前
【数据库数据恢复】NDF文件变0KB、数据库损坏?超大数据库数据恢复案例
数据库·oracle
狗凯之家源码网2 小时前
纯 PHP+MySQL 应用市场系统源码实测!
开发语言·mysql·php
数据技术说2 小时前
数据库缓存架构深度解析:命中率、一致性、多层缓存管理
数据库·架构
姚远Oracle ACE3 小时前
对比测试了 openGauss、PostgreSQL、Oracle、MySQL 的CPU 指令数
mysql·postgresql·oracle
CJi0NG3 小时前
【自用】MySQL-多表查询
数据库·mysql