mysql sql语句优化实战(一、基于in的优化)

【in中子查询为null,导致索引失效,最终全表扫描】


sql语句 (优化前)

mysql sql语句优化实战(一、基于in的优化)_第1张图片

sql语句(优化后) 

 mysql sql语句优化实战(一、基于in的优化)_第2张图片

 explain执行结果(优化前)

mysql sql语句优化实战(一、基于in的优化)_第3张图片

  explain执行结果(优化后)

查询需要的时间 (优化前)

mysql sql语句优化实战(一、基于in的优化)_第4张图片

 查询需要的时间 (优化后)

 


 

分析:

m.ownerid IN ( SELECT id FROM mb_emp WHERE pid = 453 ) OR m.ownerid = 453           优化前

m.ownerid IN ( SELECT id FROM mb_emp WHERE pid = 453  OR id = 453 )                          优化后

经测试SELECT id FROM mb_emp WHERE pid = 453 为null时,m.ownerid建立的索引将失效,从上图可以看出。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(mysql sql语句优化实战(一、基于in的优化))