区别:
1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
结论:
1. 对于left join,不管on后面跟什么条件,左表的数据全部查出来,因此要想过滤需把条件放到where后面
2. 对于inner join,满足on后面的条件表的数据才能查出,可以起到过滤作用。也可以把条件放到where后面。
参考链接: 点击跳转
通过 explain 关键字可以查看 Extra 字段的反馈
* explain 主要看 type,key,filtered,extra 4个字段
* type: ALL < index < range ~ index_merge < ref < eq_ref < const < system , ALL 最差
* key:是确定使用的哪个index,如果这里没有显示任何key,说明你需要创建index
* filtered:是指筛选率,越低,说明越差
* Extra: 最好是 NULL 或者 Using index, 如果是 Using temporary 就比较差了
关于 explain 的说明,参考链接: 点击跳转