MySQL:针对唯一值选择 DISTINCT 与 GROUP BY
从 MySQL 表中检索唯一值时,SELECT DISTINCT
和 GROUP BY
似乎可以互换,但它们的性能可能会有很大差异。 本文比较了它们的效率。
场景:独特职业检索
考虑一个查询,从 users
表中检索“XYZ”员工的唯一职业:
<code class="language-sql">SELECT u.profession FROM users u WHERE u.employer = 'XYZ' ORDER BY u.profession</code>
为了确保只返回唯一的职业,我们可以使用 SELECT DISTINCT
或 GROUP BY
:
选项 1:SELECT DISTINCT
<code class="language-sql">SELECT DISTINCT u.profession FROM users u WHERE u.employer = 'XYZ' ORDER BY u.profession</code>
选项 2:GROUP BY
<code class="language-sql">SELECT u.profession FROM users u WHERE u.employer = 'XYZ' GROUP BY u.profession ORDER BY u.profession</code>
性能注意事项
虽然两个查询产生相同的输出,但 SELECT DISTINCT
通常提供更好的性能。 MySQL 使用位图或哈希表等技术来优化 SELECT DISTINCT
,在一次传递中有效地过滤重复项。 GROUP BY
相反,涉及对行进行分组和额外的聚合开销,可能会减慢查询执行速度。
例外:当GROUP BY
可能更快时
虽然SELECT DISTINCT
通常占上风,但GROUP BY
在特定情况下可以胜过它。 如果 ORDER BY
子句包含 profession
列之外的列,则 GROUP BY
可能会提供卓越的优化。
推荐
要检索 MySQL 中的唯一值,SELECT DISTINCT
通常是更有效的选择。 然而,使用您的特定数据对这两个查询进行基准测试对于确定应用程序的最佳方法至关重要。
以上是SELECT DISTINCT 与 GROUP BY:MySQL 中唯一值检索哪个更快?的详细内容。更多信息请关注PHP中文网其他相关文章!