Mysql 选择哪个表和加入哪个表重要吗
如果我从两个表中选择相等的字段,那么从哪个表中选择以及从哪个表中连接是否重要 我想我真的对如何最好地连接表很感兴趣。是否有选择和加入的指导原则,或者什么时候不重要 我正在处理一个连接大约5个表的查询,但不确定从哪个表中提取以及连接哪个表是否重要。目前我正在使用FROM表中的WHERE子句。我认为这是正确的方法,但任何解释或指导都会很好 这同样适用于左连接,因为我看到的反馈是默认的内部连接并不重要 比如说Mysql 选择哪个表和加入哪个表重要吗,mysql,sql,join,Mysql,Sql,Join,如果我从两个表中选择相等的字段,那么从哪个表中选择以及从哪个表中连接是否重要 我想我真的对如何最好地连接表很感兴趣。是否有选择和加入的指导原则,或者什么时候不重要 我正在处理一个连接大约5个表的查询,但不确定从哪个表中提取以及连接哪个表是否重要。目前我正在使用FROM表中的WHERE子句。我认为这是正确的方法,但任何解释或指导都会很好 这同样适用于左连接,因为我看到的反馈是默认的内部连接并不重要 比如说 SELECT a.field1, a.field2, a.field3, b
SELECT
a.field1,
a.field2,
a.field3,
b.field1,
b.field2
选择1:
FROM
a
JOIN
b ON a.field1 = b.field1
WHERE
a.field1 = 'abc'
选择2:
FROM
b
JOIN
a ON b.field1 = a.field1
WHERE
a.field1 = 'abc'
内部联接没有功能性差异,但外部联接有功能性差异 ^^一个很好的解释原因的方法是:A和B之间的左外部连接与B和A之间的右外部连接是一样的。方向对外部连接非常重要。事实上,这就是为什么您不必在“left join”或“right join”中说关键字“outer”,数据库知道您想要外部联接,因为否则指定方向就没有意义了 如果您的问题是关于性能的,那么首先指定较小的表,然后连接到较大的表,而不是相反的方式,可能会有潜在的优势。但是,根据表之间的关系,不可能总是以这种方式进行优化
例如,Oracle有一个前导提示,可以用来指示数据库首先从指定的表开始,即使它不是FROM子句中列出的第一个表。对于内部联接,它应该无关紧要,而且两种形式在语义上是等效的。。但查询规划者可能会感到惊讶。为了一致性/清晰性,我通常将主/父表放在FROM中。可能重复@MikeB我的问题集中在WHERE表与JOIN表之间。我不认为问题是一样的。@d--b在语义上对于内部连接仍然不重要。我想你也可以从这篇文章中获益。较小的表first query optimizer可以自由地对它们重新排序。我遇到过这样的情况:通过在from子句中更改表的顺序或在Oracle数据库中使用前导提示,性能得到了显著提高。并非每个数据库中的统计信息都是最新的,首先,对于统计信息不是最新的数据库,我不太关心性能。可以合理地推断,性能不是优先级,因为统计信息可能会影响所有应用程序中的查询。