我想问问有没有一种方法可以知道在SQL中使用联接时哪个表应该是左还是右?例如,我有两个要加入的表,例如,
SELECT * FROM filtered_numbers LEFT JOIN telecoms ON filtered_numbers.TelecomID = telecoms.ID
现在,“ filtered_numbers”表具有200条记录,而“ telecoms”只有5条记录。 我的问题是,如果我互换查询中这两个表的位置,数据库的性能/效率是否会有差异? 如果是,为什么?
答案 0 :(得分:0)
这个答案有点复杂。首先要注意的是
FROM filtered_numbers LEFT JOIN
telecoms
ON filtered_numbers.TelecomID = telecoms.ID
在语义上与以下内容完全不同:
FROM telecoms LEFT JOIN
filtered_numbers
ON filtered_numbers.TelecomID = telecoms.ID
仅切换表会更改查询的含义。执行计划和性能将有所不同。如果在这种情况下将LEFT JOIN
更改为RIGHT JOIN
,则会得到相同的查询,但是正如Strawberry指出的那样,LEFT JOIN
是更可取的。
这是简化的,但并非总是如此。如果您的查询比较复杂,则JOIN
的 顺序可能会有所不同。现在,LEFT JOIN
有一个“驱动”表(所有行都保留在其中),因此选项更少。但是,如果您有INNER JOIN
,那么排序就可以。
实际上,MySQL提供optimizer hints just to control join order至关重要。
因此,您的问题的答案是:
RIGHT JOIN
不会影响性能,因为优化器实际上只有一个选项。