1. on where过滤是非分明
在left join时候 过滤条件在on中和在where中有天壤之别,on中不会做过滤,只是影响非驱动表所有字段在不满足条件时的取值,但是where会做记录的去除
2. in not in if()对于null值的问题
tableA.name not in ('xx') 和tableA.name in ('xxx',null),都会将name值为null的排除掉;if(null,1,0)返回0。null =null 返回null,切忌判断null使用is。
3. join优化
join时候小表在前,大表在后;如果驱动表够小,建议做map端join优化
网友评论