数据库操作中,去重计数有两种实现方式,一种是 count + distinct 一种是 count + group by
table
idsalary110K215K310K410K520K610K715K
假设有以上这么个表,要对salary去重计数,按照上面的思路有两种实现方法:
1.
select distinct(count(salary)) from table
2.
select count(salary) from table group by salary
那么这两种方法有什么不同?都是出于什么样的考虑呢?
distinct 需要将所有的salary值存到一块内存当中去,相当于一个hash结构,key是salary的值,然后最后计算hash的个数;group by 先将salary进行一次sort排序,时间复杂度为nlogn,空间复杂度为1;
选取条件
数据分布去重方式原因离散(多表)group by发挥空间复杂度的优势,但是花费时间长一些集中distinctdistinct占用空间较小,发挥时间复杂度的优势
极端情况考虑:
如果数据全部重复,用distinct又快又好;如果数据全部唯一,用group by;