在SQL JOINS中定义右表和左表

时间:2020-11-12 07:35:53

标签: mysql sql join

我想问问有没有一种方法可以知道在SQL中使用联接时哪个表应该是左还是右?例如,我有两个要加入的表,例如,

SELECT * FROM filtered_numbers LEFT JOIN telecoms ON filtered_numbers.TelecomID = telecoms.ID

现在,“ filtered_numbers”表具有200条记录,而“ telecoms”只有5条记录。 我的问题是,如果我互换查询中这两个表的位置,数据库的性能/效率是否会有差异? 如果是,为什么?

1 个答案:

答案 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不会影响性能,因为优化器实际上只有一个选项。
  • 在更复杂的查询中,联接的顺序可能很重要。
相关问题