left join中,on字段后用and和where的性能区别

Posted 来老铁干了这碗代码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了left join中,on字段后用and和where的性能区别相关的知识,希望对你有一定的参考价值。

结论:

  1. on后用and连接,都作为on条件。
  2. 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做筛选。

因此, 对于二者的性能问题,有两种结果:

  1. 如果我们对age增加了索引,对于后者,a表查询会走age索引,不会全表查询。性能更好。
  2. 如果我们没有age索引,那么无论是前者还是后者,第一次扫描都是全量扫描,性能相同。

以上是关于left join中,on字段后用and和where的性能区别的主要内容,如果未能解决你的问题,请参考以下文章

left join中,on字段后用and和where的性能区别

left join 后用 on 还是 where,区别大了!

left join 后用 on 还是 where,区别大了!

left join on 后and 和 where 的区别

京东面试官:SQL 语句中 left join 后用 on 还是 where,区别大了!

Oracle的left join中on和where的区别