count(distinct) 与group by 浅析

count(distinct) 与group by 浅析在传统关系型数据库中,groupby与count(distinct)都是很常见的操作。count(distinctcolA)就是将colA中所有出现过的不同值取出来,相信只要接触过数据库的同学都能明白什么意思。count(distinctcolA)的操作也可以用groupby的方式完成,具体代码如下:selectcount(distinctcolA)fromtable1;selec

大家好,又见面了,我是你们的朋友全栈君。

项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步

x在传统关系型数据库中,group by与count(distinct)都是很常见的操作。count(distinct colA)就是将colA中所有出现过的不同值取出来,相信只要接触过数据库的同学都能明白什么意思。

count(distinct colA)的操作也可以用group by的方式完成,具体代码如下:

select count(distinct colA) from table1;
select count(1) from (select colA from table1 group by colA)alias_1;

这两者最后得出的结果是一致的,但是具体的实现方式,有什么不同呢?
上面两种方式本质就是时间与空间的权衡。
distinct需要将colA中的所有内容都加载到内存中,大致可以理解为一个hash结构,key自然就是colA的所有值。因为是hash结构,那运算速度自然就快。最后计算hash中有多少key就是最终的结果。
那么问题来了,在现在的海量数据环境下,需要将所有不同的值都存起来,这个内存消耗,是可想而知的。所以如果数据量特别大,可能会out of memory。。。

group by的实现方式是先将colA排序。排序大家都不陌生,拿最见得快排来说,时间复杂度为 O ( n l o g n ) O(nlogn) O(nlogn),而空间复杂度只有 O ( 1 ) O(1) O(1)。这样一来,即使数据量再大一些,group by基本也能hold住。但是因为需要做一次 O ( n l o g n ) O(nlogn) O(nlogn) 的排序,时间自然会稍微慢点。。。

总结起来就是,count(distinct)吃内存,查询快;group by空间复杂度小,在时间复杂度允许的情况下,可以发挥他的空间复杂度优势。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/143879.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • shell脚本快速入门之—–shell脚本练习100例!!!

    shell脚本快速入门之—–shell脚本练习100例!!!#!/bin/bashi=1foriin{1..254}doping-c2-w3-i0.3192.168.110.$i$>/dev/nullif[$?-eq0];thenecho”192.168.110.$iisyes”elseecho”192.168.110.$iisno”fileti++done

    2022年10月3日
    2
  • Linux系统内核笔记[通俗易懂]

    Linux系统内核笔记[通俗易懂]一、课程介绍UNIX/Linux环境C语言,借助学习操作系统的接口的方法来学习、理解操作系统的运行机制以及一些网络协议C/C++、数据结构和算法与平台无关,重点是算法逻辑Uinx/Linux/Android/IOS平台相关,系统接口嵌入式/驱动/移植硬件相关,硬件接口 环境介绍 内存管理 文件操作 文件管理 信号处理 进程管理 进程通信 网络通信 线程管理 线程…

    2022年6月4日
    24
  • nested_initialization error sql*net

    nested_initialization error sql*net1.报错:###Cause:java.sql.SQLSyntaxErrorException:ORA-00911:无效字符;badSQLgrammar[];nestedexceptionisjava.sql.SQLSyntaxErrorException:ORA-00911:无效字符2.出错原因:1)sql在数据库执行都是OK的。真…

    2022年8月20日
    7
  • Can通信接口学习笔记[通俗易懂]

    Can通信接口学习笔记[通俗易懂]第一步:了解Can通信接口协议,这里推荐大家<<Can入门教程>>(必读),里面详细说明的can相关知识点;另外推荐大家看有关Can协议标准书籍(选读),相关的pdf书籍下载地址:链接:https://pan.baidu.com/s/1KDtoqkm541xZhoTUpXVJaw提取码:9dvs第二步:特别需要关注点,1、通信速度与传输距离关系,2、通讯接口的硬…

    2022年6月20日
    36
  • 【从0開始Tornado建站】群聊

    【从0開始Tornado建站】群聊

    2021年12月5日
    44
  • 讲解最到位的粒子群算法,附matlab代码求解函数最优值

    讲解最到位的粒子群算法,附matlab代码求解函数最优值从鸟群觅食行为到粒子群算法粒子群算法的核心例:求解函数最小值粒子群算法的驱动因素从鸟群觅食行为到粒子群算法鸟群寻找食物的过程中,鸟与鸟之间存在着信息的交换,每只鸟搜索目前离食物最近的鸟的周围区域是找到食物的最简单有效的办法。粒子群算法(以下简称PSO)就是模拟鸟群觅食行为的一种彷生算法。解=粒子=鸟(鸟的位置象征着离食物的距离,粒子的位置也象征着…

    2022年5月31日
    68

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号