优先级在JOIN关键字中执行WHERE子句

时间:2015-06-14 16:17:47

标签: mysql sql

我想知道,当我在指令where后面使用join子句时,会发生什么?

事实上,我想知道的是执行的优先级。例如,请考虑以下代码:

select * from tablename1 t1 inner join tablename2 t2 on t1.id=t2.id where id='10'

然后先在上面的代码中发生了什么?

SQL会选择id为10的所有行,然后运行join关键字? 或join关键字首先运行,然后运行where子句?

2 个答案:

答案 0 :(得分:1)

要回答您的问题加入,请先运行,但如果您想过滤,请尝试此查询

select * 
from (
  select *
  from tablename1
  where id='10') t1,
  (
  select *
  from tablename2 
  where id = '10'
) t2  

<强>更新 正如其他人建议检查执行计划将有助于理解查询的执行情况,但如果您想自己决定,最好自己做。

更新2: 感谢@GiorgiNakeuri的观点。正如内部查询更改后的评论中所述,内部联接不需要。一个简单的笛卡尔连接就足够了。

阅读Art of SQL以获取有关sql优化的更多信息。

有关更高级的知识,请尝试SQL Tuning

答案 1 :(得分:1)

为了自己回答您的问题,您可以使用EXPLAIN

运行

EXPLAIN select * from tablename1 t1 inner join tablename2 t2 on t1.id=t2.id where id='10'

EXPLAIN非常酷。我几乎每天都用它。它帮助我理解复杂的查询。

它还会建议您索引哪些列以及如何改进原始查询