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)
上一篇 2022年5月11日 下午7:00
下一篇 2022年5月11日 下午7:00


相关推荐

  • python 获取时间戳_python十个实例

    python 获取时间戳_python十个实例1、获取秒级时间戳与毫秒级时间戳、微秒级时间戳importtimeimportdatetimet=time.time()print(t)#原始时间数据print(int(t))#秒级时间戳print(int(round(t*1000)))#毫秒级时间戳print(int(round(t*1000000)))#微秒级时间戳返回1…

    2022年10月2日
    7
  • MySQL查看实时执行的SQL语句

    MySQL查看实时执行的SQL语句

    2022年2月17日
    48
  • matlab遗传算法gatbx工具箱介绍及安装说明

    matlab遗传算法gatbx工具箱介绍及安装说明一 遗传算法简介 官网 http www geatpy com tutorials 遗传算法是以自然选择和遗传理论为基础 将生物进化过程中适者生存规则与群体内部染色体的随机信息交换机制相结合的高效全局寻优搜索算法 这样解释对于广大的初学者而言是既神秘又高大上的 实际上 我们可以这样理解 遗传算法可以解决传统的目标优化问题 但是 它摒弃了传统的搜索方式 如遍历

    2026年3月17日
    1
  • IndexDB学习

    IndexDB学习cookiecookie 是保存在客户端本地的纯文本文件 其核心目的是为了解决服务器无法识别用户身份的问题 HTTP 协议是无状态的 cookie 工作原理客户端发送一个请求到服务器服务器发送一个 HttpResponse 响应到客户端 其中包含 Set Cookie 的头部客户端保存 cookie 之后向服务器发送请求时 HttpRequest 请求中会包含一个 Cookie 的头部服务器返回响应数据可以在浏览器调试栏中的 Headers 和 Cookies 中查看 cookie 的属性属性项

    2026年3月18日
    2
  • 什么是redis

    什么是redis

    2021年10月18日
    53
  • Python range函数

    Python range函数Pythonrange 函数的介绍 使用方法以及注意事项

    2026年3月19日
    1

发表回复

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

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