count去重和distinct去重

有两种去重方法:
1、select count(distinct id) from a;这个是将所有值都放入到内存中,key为列值,通过hash算出有多少个key就是多少行。
2、select count(1) from (select 1 from a group by id ) a,这个是通过group by先将id进行排序,之后只要进行计数就可以了。时间复杂度为nlogn,空间复杂度为1。空间复杂度小。

两种方法优缺点比较:
如果内存够容纳所有行数,第一种优于第二种

当如果内存不够的话,第二种优于第一种。

总结数据量小第一种,数据量大第二种。

时间: 2024-11-16 07:34:22

count去重和distinct去重的相关文章

List<object>进行Distinct()去重

原文:List<object>进行Distinct()去重 有时我们会对一个list<T>集合里的数据进行去重,C#提供了一个Distinct()方法直接可以点得出来.如果list<T>中的T是个自定义对象时直接对集合Distinct是达不到去重的效果.我们需要新定义一个去重的类并继承IEqualityComparer接口重写Equals和GetHashCode方法,如下Demo 1 using System; 2 using System.Collections.Ge

mongodb中使用distinct去重的简单方法_MongoDB

MongoDB的destinct命令是获取特定字段中不同值列表.该命令适用于普通字段,数组字段和数组内嵌文档. mongodb的distinct的语句: 复制代码 代码如下: db.users.distinct('last_name') 等同于 SQL 语句: 复制代码 代码如下: select DISTINCT last_name from users 表示的是根据指定的字段返回不同的记录集. 一个简单的实例: // > db.addresses.insert({"zip-code&qu

【大数据技巧】MaxCompute优化去重计算的性能

免费开通大数据服务:https://www.aliyun.com/product/odps 转载自dachuan 随着双十一数据量的暴增,之前用distinct去重可以简单处理的场景,现在消耗的时间成倍增长.如果用了multiple distinct,那就更要警惕,因为多重去重本身会带来数据量的成倍增长,很可能10分钟的任务,在双十一期间会跑上几个小时都没有结果. 这里介绍一个小技巧,其实在稳定性手册里面已经有过介绍,不过总感觉没有看懂.最近正好做了一次优化,于是在这里小结一下: 例如原来的代码

mysql | 去重查询

今天在实际开发过程中遇到一个数据库去重查询的问题,在这里给大家分享一下. 类似于上面这张数据表,我们发现id=5和id=6的数据passWord和userName数据是一样的.我们的需求是去掉重复的数据(passWord,userName)获得结果集,去重的条件就是根据passWord和userName两个字段. 利用 distinct 我们知道,mysql提供了数据去重的方法,利用distinct关键字对需要处理的字段进行去重.我们来看一下效果. 咦?不对啊,为什么只返回了需要去重处理的字段,

C# datatable中重复数据去重

#region datatable去重 /// <summary> /// datatable去重 /// </summary> /// <param name="dtSource">需要去重的datatable</param> /// <param name="columnNames">依据哪些列去重</param> /// <returns></returns> pu

PostgreSQL 数据去重大法

标签 PostgreSQL , 去重 , 单列去重 , 多列去重 , 行去重 , 多列混合去重 , varidict 参数 , 数组排序 , 数组元素重排 背景 去重的需求比较常见,去重也可以衍生出很多变种.例如 1. 单列去重,很好理解,就是按某列去除重复记录.保留规则(例如保留最新的,保留最旧的,或者保留某个其他字段最大的). 2. 多列去重,按多列,去除重复记录.保留规则(例如保留最新的,保留最旧的,或者保留某个其他字段最大的). 3. 行去重,按行,去除重复记录.保留规则(例如保留最新的

实例讲解临时处理去重 80w 数据时夯死现象_oracle

近日,在对一张百万数据的业务表进行去重时,去重操作竟然夯住了.下面就来简单回忆一下. 1.查询业务表数据量,查看到总共有200多w条 SQL> select count(*) from tb_bj_banker_etl; 2552381 2.查询表内应该去掉的重复数据量,共80多w条 SQL> select count(*) from tb_bj_banker_etl where (id) in (select id from tb_bj_banker_etl group by id havi

SQL学习笔记五去重,给新加字段赋值的方法_MsSql

去掉数据重复 增加两个字段 alter TABLE T_Employee Add FSubCompany VARchar(20); ALTER TABLE T_Employee ADD FDepartment VARCHAR(20); 给新加的字段赋值 UPDATE T_Employee SET FSubCompany='Beijing',FDepartment='Development' where FNumber='DEV001'; UPDATE T_Employee SET FSubCom

SQL学习笔记五去重,给新加字段赋值的方法

去掉数据重复 增加两个字段 alter TABLE T_Employee Add FSubCompany VARchar(20); ALTER TABLE T_Employee ADD FDepartment VARCHAR(20); 给新加的字段赋值 UPDATE T_Employee SET FSubCompany='Beijing',FDepartment='Development' where FNumber='DEV001'; UPDATE T_Employee SET FSubCom