一尘不染

LEFT JOIN与多个SELECT语句

sql

我正在研究别人的PHP代码,并且一遍又一遍地看到这种模式:

(伪代码)

result = SELECT blah1, blah2, foreign_key FROM foo WHERE key=bar

if foreign_key > 0  
  other_result = SELECT something FROM foo2 WHERE key=foreign_key  
end

如果其他表中没有相关行,则代码需要分支,但是通过在单个SELECT语句中执行LEFT
JOIN不能做到更好吗?我是否缺少一些性能优势?可移植性问题?还是我只是在挑剔?


阅读 329

收藏
2021-03-10

共1个答案

一尘不染

没有足够的信息来真正回答问题。我曾在一些应用程序上工作过,这些应用程序出于一个原因减少查询数量而出于另一个原因增加查询数量
提高了性能。在同一个应用中!

对于表大小,数据库配置以及查询外部表的频率的某些组合,执行两个查询可能比LEFT JOIN快得多。 但是经验和测试是唯一可以告诉你的东西
。具有中等大小表的MySQL似乎对此很敏感,IME。在一个表上执行三个查询通常比一个查询联接三个查询要快得多。我已经看到了一个数量级的加速。

2021-03-10