我正在研究其他人的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不能更好地完成此操作吗?我错过了一些性能优势吗?便携性问题?或者我只是在挑剔?
这绝对是错误的.你无缘无故地第二次越过电线.数据库在他们的问题空间非常快.连接表就是其中之一,你会看到更多的性能从第二个查询到连接的性能下降.除非您的表空间是数亿条记录,否则这不是一个好主意.
没有足够的信息来真正回答这个问题.我一直致力于减少查询计数的应用程序,原因之一是由于其他原因而增加了查询计数,这些都提高了性能.在同一个应用程序中!
对于表大小,数据库配置以及查询外表的频率的某些组合,执行这两个查询可能比LEFT JOIN快得多.但经验和测试是唯一可以告诉你的.具有中等大小表的MySQL似乎对此很容易接受,IME.在一个表上执行三个查询通常比一个查询加入三个查询要快得多.我已经看到了一个数量级的加速比.