首先在mysql中发生了什么:join或where

时间:2013-12-31 07:16:18

标签: mysql sql

假设我有两个表A和B以及以下查询:

select *
from A
inner join B on A.id = B.id
Where A.id = 5

mysql首先执行连接还是在哪里?

修改

如果例如A包含1000行,则在where条件之后它只包含1行。 在1行表上执行连接效率更高,因此它似乎首先执行where,然后才能更有效地进行连接。

1 个答案:

答案 0 :(得分:9)

join发生在where之前,但是......

where子句是对连接返回的所有行的过滤器,但优化器会识别出A.id上存在索引,它将用于从{{1}检索行匹配,然后连接将发生,然后理论上where子句将过滤结果,但优化器将再次识别条件已经满足,因此它将跳过它作为过滤器。

所有这一切,优化器将始终返回与没有优化器时返回的结果相同的结果。