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