首页/数据/SQL 速查/先聚合再连接
本包目录(311 条)

先聚合再连接

先在子查询里过滤并汇总,得到小结果集再连接主表,通常比连接全部明细再聚合更省资源。

SQL 速查数据更新于 2026-10-12

示例

示例
SELECT u.id, u.name, s.total
FROM users u
JOIN (
    SELECT user_id, SUM(amount) AS total
    FROM orders
    WHERE status = 1
    GROUP BY user_id
) s ON s.user_id = u.id
ORDER BY s.total DESC;
思路过滤与聚合放在子查询,连接发生在小结果集上
收益减少连接输入与聚合中间结果
注意派生表在旧版本可能先物化,改写后用 EXPLAIN 复核

易错点

  • 在外层连接明细再 SUM 容易把行数放大后的金额重复累计,聚合层级要提前定
  • 派生表的条件下推能力与版本相关,升级数据库后重新看执行计划

数据来源与参考

  • MySQL 8.0 Reference Manual · Optimizing Subqueries
  • PostgreSQL Documentation · Subquery Expressions
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌