我想知道,当我在指令where
后面使用join
子句时,会发生什么?
事实上,我想知道的是执行的优先级。例如,请考虑以下代码:
select * from tablename1 t1 inner join tablename2 t2 on t1.id=t2.id where id='10'
然后先在上面的代码中发生了什么?
SQL会选择id
为10的所有行,然后运行join
关键字?
或join
关键字首先运行,然后运行where
子句?
答案 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
非常酷。我几乎每天都用它。它帮助我理解复杂的查询。
它还会建议您索引哪些列以及如何改进原始查询