sql优化小技巧

11.大数据量时,怎样让全局count/sum distinct更快?

以下两个SQL,有人可能认为例句1快于例句2。

例句1:
SELECT
COUNT(DISTINCT uin) login_uins
FROM
tabled
WHERE
ftime >= 20121001
AND ftime <= 20121001

例句2:
SELECT
COUNT(uin) login_uins
FROM
( select distinct uin from tabled WHERE
ftime >= 20121001
AND ftime <= 20121001 ) subq

实际上,例句2远远快于例句1。元芳,你怎么看?

例句1虽然只有1个mr,但是,这个mr却只有1个reduce任务,导致这个reduce任务需要读取和处理大量的数据,这不仅导致执行慢,而且,在如果tabled中的数据量太大,可能导致执行reduce任务的节点down掉。
例句2先去重,后全局统计,没有像例句1那样明显的瓶颈。所以,请牢记当对某个数据集进行全局count distinct操作时,尽量用例句2的形式。

在其他情况下,即使有group by,但是group by的维度太低,也可以考虑这种改写方法。也就是说,一定要避免group by的维度太低。

    原文作者:章鱼哥呀
    原文地址: https://www.jianshu.com/p/e9b9f7656597
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞