为什么mysql使用left join连表查询不走索引的过滤条件是连接条件,建议将其放到on后面;如果是非连接条件,则放到where后面。
时间: 2024-05-28 20:08:58 浏览: 63
这是因为left join是一种外连接,在连接两张表时,如果连接条件不能匹配时,会保留左表中的数据,并在右表中对应位置填充null值。而放在on后面的条件是对连接后的结果进行过滤,如果过滤条件依赖于右表中的数据,则不能使用索引进行优化。而非连接条件则是对连接后的结果进行进一步的过滤,所以建议将连接条件放到on后面,非连接条件放到where后面进行过滤。
相关问题
mysql使用left join on索引失效
当使用 LEFT JOIN 时,如果 ON 子句中的条件不是主键或唯一索引,则可能会导致索引失效。这是因为 LEFT JOIN 会返回左表中的所有行,即使在右表中没有匹配的行。因此,MySQL 通常会忽略非唯一索引,而使用全表扫描来处理这种情况。
为了解决这个问题,可以尝试以下几种方法:
1. 将 ON 子句中的条件改为主键或唯一索引。
2. 将 LEFT JOIN 改为 INNER JOIN,如果业务允许的话。
3. 对右表中的非唯一索引进行优化,例如使用覆盖索引等方式。
mysql left join 不走索引
mysql left join 不走索引
左连接(Left Join)是通过连接操作符“left join”(左外连接)实现的。当使用左连接时,查询将会返回左表中所有的行和右表中匹配到的行,如果右表中没有匹配的行,则该行将会补充为 NULL 值。使用左连接时,查询的效率可能会比较低,尤其是在没有使用索引的情况下,可能会发生不走索引的情况。
阅读全文