MySQL关联查询优化实例

2014-11-24 18:31:21 · 作者: · 浏览: 0


(1)背景


项目采用MySQL数据库,操作使用Ibatis;


(2)查询说明


这个查询是每次查询一定数目的用户信息,查询中涉及到多表关联,具体查询SQL如下



(3)分析过程


使用MySQL自带的profiler分析结果如下图




观察可得,99%的时间花在了拷贝数据到临时表上,也就是与其中的子查询有关系。


想来奇怪,如果只是LIMIT 15条数据,临时数据不应该花费这么多时间;个人觉得问题应该出在LIMIT对于里面的子查询无效,也就是里面的子查询会涉及到全部数据,从而导致临时表消耗很大的时间,这样就不难理解了。


(4)优化


想清楚了上面的原因,解决的思路也就比较清楚了,只要让里面涉及的子查询只查LIMIT对应的数据就可以了。


重新实行的方式如下: