美文网首页
LEFT JOIN优化

LEFT JOIN优化

作者: 盼旺 | 来源:发表于2025-03-11 14:12 被阅读0次

在 SQL 中,若要在 LEFT JOIN 时先筛选左表,再筛选右表,最后关联,最优写法是 将左表的筛选放在子查询中,右表的筛选放在 ON 条件里。这样能减少关联时的数据量,提升性能。

示例场景

假设有两个表:

用户表 users:存储用户信息。
订单表 orders:存储订单信息,通过 user_id 关联用户。
需求
查询 2023 年注册的用户 及其 已完成的订单,要求:

先筛选左表 users(注册时间在 2023 年)。
再筛选右表 orders(订单状态为已完成)。
最后关联两张表。

最优 SQL 写法

SELECT
    u.user_id,
    u.name,
    o.order_id,
    o.amount
FROM
    (SELECT * FROM users WHERE register_year = 2023) u  -- 先筛选左表
LEFT JOIN
    orders o
ON
    u.user_id = o.user_id
    AND o.status = 'completed';  -- 再筛选右表并关联

1.左表筛选:
通过子查询 (SELECT * FROM users WHERE register_year = 2023) u 先过滤左表数据,减少参与 JOIN 的数据量。
如果左表数据量很大,这一步能显著降低计算复杂度。
2.右表筛选:
在 ON 条件中指定 o.status = 'completed',确保只关联符合条件的右表记录。
注意:不要将右表筛选放在 WHERE 中,否则会隐式将 LEFT JOIN 转换为 INNER JOIN(因为 WHERE 会过滤掉右表为 NULL 的行)。
3.执行顺序:
先执行子查询过滤左表,再执行 LEFT JOIN 并过滤右表,最后关联结果。

相关文章

网友评论

      本文标题:LEFT JOIN优化

      本文链接:https://www.haomeiwen.com/subject/mctpmjtx.html