MySQL优化系列--特定类型优化

count(DISTINCT col) 与group by

count(distinct colA)就是将colA中所有出现过的不同值数量计算出来。也可以用group by完成

select count(distinct colA) from table1;
select count(1) from (select colA from table1 group by colA);
区别(本质是时间与空间权衡)
count(DISTINCT col) group by
原理

        distinct需要将colA中的所有内容都加载到内存中,大致可以理解为一个hash结构,key自然就是colA的所有值。因为是hash结构,那运算速度自然就快。最后计算hash中有多少key就是最终的结果。

        海量数据环境下,需要将所有不同的值都存起来,内存消耗特别大,可能会out of memory

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

优点:速度快

缺点:内存消耗大

优点:内存消耗小

缺点:速度稍慢

 

 

 

你可能感兴趣的:(数据库)