省流
首先,给出一个大致的结论(完整解释请继续阅读):
- 有索引时,
GROUP BY
和DISTINCT
的效率几乎相同,都可以利用索引优化。 - 没有索引时,
DISTINCT
的效率通常更高。原因在于GROUP BY
会进行排序,可能会触发filesort
,导致 SQL 执行变慢。
那么,接下来的问题是:
大约 4 分钟
首先,给出一个大致的结论(完整解释请继续阅读):
GROUP BY
和 DISTINCT
的效率几乎相同,都可以利用索引优化。DISTINCT
的效率通常更高。原因在于 GROUP BY
会进行排序,可能会触发 filesort
,导致 SQL 执行变慢。那么,接下来的问题是:
说到 SQL 查询语句,几乎所有开发者都对 SELECT *
不陌生。在早期学习 SQL
或快速开发原型时,我们可能经常用它来偷懒,因为它看起来既简单又直接:想要啥,全都给。但随着项目的深入和数据库的复杂化,你会发现这个看似万能的工具,其实问题也不少。
今天我们就来聊聊,为什么在许多开发手册中,明确建议避免使用 SELECT *
,以及它为什么仍然在一些场景中大放异彩。
SELECT *