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

SQL JOIN多表查询最佳实践:两种关联写法哪种执行效率更高?

两种SQL查询的性能对比结论

问题复现

对比以下两种关联查询写法的运行效率:

写法1

SELECT A.column1, B.column2, C.column3 
FROM TableA A
INNER JOIN TableB B ON B.id = A.id
INNER JOIN TableC C ON C.id = A.id
WHERE A.ID = ....

写法2

SELECT A.id, A.column1, B.column2, C.column3 
FROM TableA A
INNER JOIN (SELECT id, column2 FROM TableB) B ON B.id = A.id
INNER JOIN (SELECT id, column3 FROM TableC) C ON C.id = A.id
WHERE A.ID = ....

最终结论

绝大多数主流关系型数据库(MySQL、PostgreSQL、Oracle、SQL Server等)场景下,写法1的性能不会弱于写法2,大部分情况两者执行效率完全一致,部分特殊场景下写法2反而更慢。

原因说明

  • 现在的成熟数据库都自带查询优化器,内置「投影下推」能力:就算你用写法1直接关联整表,优化器也会自动识别你只需要用到B表的id、column2和C表的id、column3,执行时只会提取这几个需要的字段,不会把整表的所有字段都拉取出来做关联,两者生成的执行计划几乎没有区别。
  • 写法2的自定义子查询反而可能带来额外开销:一方面优化器解析子查询需要多一步计算成本,虽然开销极低可以忽略;另一方面如果是更复杂的查询场景,子查询里带有聚合、LIMIT、函数运算等无法下推的逻辑时,优化器可能会先把子查询的全量结果做成临时表再关联,性能会大幅下降。
  • 额外提一句:如果你的业务不需要返回A表的id字段,写法2多查了一个无用字段,属于多余操作,虽然对性能影响极小,但完全没必要。

使用建议

日常开发优先选写法1的语法,可读性更高,也不会额外增加优化器的判断负担,字段裁剪的工作直接交给数据库优化器处理即可,不需要手动写子查询做这类操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 03:45:04