MySQL:sql group by 和 distinct 的比较


<!–

–>

MySQL:sql group by 和 distinct 的比较

在 数据库中,当需要对数据进行去重时,我们可能会用到 group by 和 distinct 命令。那么这两个命令有什么不同呢?哪个更加高效呢?接下来我们详细比较一下这两个命令。

阅读更多:

执行效率比较

在对大量数据进行处理时,执行效率的问题就显得尤为重要。因此让我们来看一下,在不同情况下, group by 和 distinct 的执行效率比较。

(adsbygoogle = window.adsbygoogle || []).push({});

可以使用索引列的情况下

在可以使用索引列的情况下, group by 的执行效率要比 distinct 高。原因在于,group by 命令会在索引列排序的基础上进行分组;而 distinct 命令在排序后再去重,需要多进行一次排序操作,并且在排序结果中可能存在相同的值,这意味着 distinct 还需要进行额外的处理,导致效率降低。下面是效率对比代码:

# group by
SELECT column1, column2, count(*) FROM table GROUP BY column1;

# distinct
SELECT COUNT(DISTINCT column1, column2) FROM table;

不可以使用索引列的情况下

如果两个命令都需要扫描数据表,那么区别就不太明显了。不过一般来讲,distinct 的执行效率要比 group by 命令高一些。这是因为 group by 需要对数据表进行排序后再分组,而 distinct 只需要进行一次排序即可达到去重的效果。具体实现:

# group by
SELECT column1, column2, count(*) FROM table GROUP BY column1;

# distinct
SELECT DISTINCT column1, column2 FROM table;

执行结果比较

虽然 group by 和 distinct 都可以达到去重的效果,但是它们的执行结果却是不同的。distinct 的执行结果是 “唯一” 的记录行,而 group by 则是每个组的汇总行。

总结

  • group by 命令对于可以使用索引列的情况下,执行效率较高;
  • distinct 命令对于不能使用索引列的数据表,在执行效率上占优;
  • distinct 命令比 group by 命令更加严格,因为它只返回 “唯一” 的记录行。而 group by 则会返回汇总结果。