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索引,那么无论是前者还是后者,第一次扫描都是全量扫描,性能相同。

猜你喜欢

转载自blog.csdn.net/weixin_43899069/article/details/127277511