Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 选择哪个表和加入哪个表重要吗_Mysql_Sql_Join - Fatal编程技术网

Mysql 选择哪个表和加入哪个表重要吗

Mysql 选择哪个表和加入哪个表重要吗,mysql,sql,join,Mysql,Sql,Join,如果我从两个表中选择相等的字段,那么从哪个表中选择以及从哪个表中连接是否重要 我想我真的对如何最好地连接表很感兴趣。是否有选择和加入的指导原则,或者什么时候不重要 我正在处理一个连接大约5个表的查询,但不确定从哪个表中提取以及连接哪个表是否重要。目前我正在使用FROM表中的WHERE子句。我认为这是正确的方法,但任何解释或指导都会很好 这同样适用于左连接,因为我看到的反馈是默认的内部连接并不重要 比如说 SELECT a.field1, a.field2, a.field3, b

如果我从两个表中选择相等的字段,那么从哪个表中选择以及从哪个表中连接是否重要

我想我真的对如何最好地连接表很感兴趣。是否有选择和加入的指导原则,或者什么时候不重要

我正在处理一个连接大约5个表的查询,但不确定从哪个表中提取以及连接哪个表是否重要。目前我正在使用FROM表中的WHERE子句。我认为这是正确的方法,但任何解释或指导都会很好

这同样适用于左连接,因为我看到的反馈是默认的内部连接并不重要

比如说

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数据库中使用前导提示,性能得到了显著提高。并非每个数据库中的统计信息都是最新的,首先,对于统计信息不是最新的数据库,我不太关心性能。可以合理地推断,性能不是优先级,因为统计信息可能会影响所有应用程序中的查询。