我正在使用Web服务中的sql查询,并希望提高速度。截至目前,查询采用多个表的笛卡尔积,并使用where子句将它们分开。
我想知道切换到LEFT JOIN是否会使查询执行得更快,因为我在结果中想要的每一行都是基于一个表,其他信息是从其他表中提取的。
答案 0 :(得分:0)
使用笛卡尔语法无法在MySQL中表达LEFT JOIN
的意图。
在Oracle中,这种所谓的omega-join语法
SELECT whatever FROM A, B WHERE A.col=B.col(+)
相当于:
SELECT whatever FROM A LEFT JOIN B ON A.col=B.col
但在MySQL中只有后一种语法有效。因此,如果你想在MySQL中进行真正的LEFT JOIN
操作,你别无选择:笛卡尔/ WHERE语法不起作用。
就优化而言,MySQL的查询执行计划程序在理解用cartesian / WHERE语法表达的普通INNER JOIN
操作方面做得非常好。但是你几乎总是更好地使用JOIN语法。它更容易阅读,查询计划程序也能理解它。