You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在LEFT JOIN中嵌套INNER JOIN:哪种写法性能与编码风格更优?

在LEFT JOIN中嵌套INNER JOIN:性能与编码风格对比

当需要在LEFT JOIN里嵌套INNER JOIN时,下面两种写法哪种在性能和编码风格上更出色?

写法一:直接嵌套JOIN

SELECT 
demo.id AS demoId,
demo2.ID AS demo2Id,
demo3.ID AS demo3Id
FROM demo
LEFT JOIN (demo2
    INNER JOIN demo3
    ON demo3.ID = demo2.ID)
ON demo2.ID = demo.ID

写法二:子查询别名化

SELECT 
demo.id AS demoId,
demo23.ID AS demo23Id
FROM demo
LEFT JOIN (
  SELECT demo2.ID
  FROM demo2 
    INNER JOIN demo3
    ON demo3.ID = demo2.ID) AS demo23
ON demo.ID = demo23.ID

性能层面

大部分现代数据库的查询优化器(比如MySQL、PostgreSQL、SQL Server)会把这两种写法优化成完全一致的执行计划——毕竟它们表达的是同一个逻辑:先让demo2和demo3做INNER JOIN,再把这个结果和demo做LEFT JOIN。

唯一可能的差异:如果写法一要返回demo2和demo3的多个字段,而写法二只返回demo2的ID,那写法二的子查询因为返回字段更少,可能在数据传输或临时表存储上略占一点优势,但如果两者返回的字段完全一致,性能就没区别。

编码风格层面

  • 写法一:代码更紧凑,少了一层子查询包裹,能直接体现JOIN的嵌套关系,但如果嵌套层级变多,括号堆在一起很容易让结构混乱,可读性直线下降。
  • 写法二:通过给子查询起别名(demo23)明确了中间结果的含义,结构更清晰。尤其是当中间查询逻辑复杂(比如加过滤条件、聚合),或者后续需要复用这个逻辑时,可读性和可维护性都更强。而且写法二扩展起来更方便,不容易出错。

总结

  • 如果只是简单的两层嵌套,且需要返回多个关联表的字段,两种写法性能没差,看个人习惯选就行;
  • 如果中间逻辑复杂、需要明确中间结果的语义,或者之后可能要扩展查询,优先选写法二,它的可读性和可维护性更靠谱;
  • 要是就喜欢代码紧凑且逻辑简单,写法一也能用,但别嵌套太深,不然自己看了都头疼。

内容的提问来源于stack exchange,提问作者Makc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 23:47:15