回答

收藏

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

技术问答 技术问答 157 人阅读 | 0 人回复 | 2023-09-14

假设我有两个表A和B以下查询:
7 E/ R; `! W" s( V1 v' {4 r1 Tselect *from Ainner join B on A.id = B.idWhere A.id = 5mysql是先执行联系还是在哪里执行?
5 [: n: g3 {  h编辑:
; b7 \# U% \$ f例如,如果A包含1000行,所以在where在条件之后,它将只包含一行。在1行表上执行连接的效率要高得多,所以似乎首先执行where,然后执行联系更有效率。9 E: ?% z) g0 g) p6 K7 F
                                                               
: b" k5 a& _  E' N; D/ Y* G3 E, B: V    解决方案:                                                                $ M* j5 o/ ^! u: [1 r( H2 T
                                                                在join之前发生where然而,…1 `! a  N% {- l/ Z
该where子句是连接所返回的所有行的过滤器,但如果有索引,优化器会意识到A.id,它将用于从A在这种匹配中,检索线将进行连接,然后理论上where句子将过滤结果,但优化器将再次意识到条件已满足,因此跳过作为过滤器。
2 r' O+ T" Y5 @8 B$ C+ O% F5 ~综上所述,优化器将始终返回与没有优化器时返回的结果相同的结果。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则