left join中,on字段后用and和where的性能区别
Posted 来老铁干了这碗代码
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了left join中,on字段后用and和where的性能区别相关的知识,希望对你有一定的参考价值。
结论:
- on后用and连接,都作为on条件。
- on后用where连接,where作为筛选条件,则是匹配两个条件相同的结果集。
例:
select * from a left join b
on a.id = b.id
and a.age = 18;
这种情况会扫描a表的全部数据,然后筛选出a.id = b.id并且a.age = 18的数据
如果把and换成where,就是:
select * from a left join b
on a.id = b.id
where a.age = 18;
这种情况会先找出a.age=18中a表的数据,然后根据a.id = b.id做筛选。
因此, 对于二者的性能问题,有两种结果:
- 如果我们对age增加了索引,对于后者,a表查询会走age索引,不会全表查询。性能更好。
- 如果我们没有age索引,那么无论是前者还是后者,第一次扫描都是全量扫描,性能相同。
以上是关于left join中,on字段后用and和where的性能区别的主要内容,如果未能解决你的问题,请参考以下文章
left join中,on字段后用and和where的性能区别
left join 后用 on 还是 where,区别大了!
left join 后用 on 还是 where,区别大了!