假设我有两个表A和B以及以下查询:
select *
from A
inner join B on A.id = B.id
Where A.id = 5
mysql首先执行连接还是在哪里?
修改
如果例如A包含1000行,则在where条件之后它只包含1行。 在1行表上执行连接效率更高,因此它似乎首先执行where,然后才能更有效地进行连接。
答案 0 :(得分:9)
join
发生在where
之前,但是......
where
子句是对连接返回的所有行的过滤器,但优化器会识别出A.id
上存在索引,它将用于从{{1}检索行匹配,然后连接将发生,然后理论上where子句将过滤结果,但优化器将再次识别条件已经满足,因此它将跳过它作为过滤器。
所有这一切,优化器将始终返回与没有优化器时返回的结果相同的结果。