最近遇到的一个线上案例。表数据量大概30w左右,单表分页查询,查最后一页就会耗时极慢
单表,带查询条件查询最后一页时
那么,问题来了,为什么查到后面会变慢呢
mysql在进行分页查询的时候
select * from a limit x,y
首先会先查询前x+y条数据,然后将前x条丢弃
所以,当x的值很大的时候,效率就会变低。
那么怎么解决呢
关联子查询可以快速定位需要获取的id段,再进行关联查询就可以提高查询效率
对于以上查询优化,可以将sql改写
很明显,同样的查询条件,时间由4秒多优化到了0点几秒,效率大大提高
其实这个sql可以再进一步拆解,当我们只查询这个表id字段时,耗时是比较短的,也就是这时我们其实快速定位了需要的数据的id段
所以获取到需要的数据的id以后,再去将每条数据具体的其他字段查询出来,速度就会快很多。
写在最后:
这是我最喜欢的主管最后一次对我的指导,今天很遗憾正式得知他要离职的消息,没来得及反馈这次优化学习的总结,在杭州的这第一份工作,转眼也呆了一年多,和我主管的相处可能不到一年,但是很感谢,工作上给我很多指导,我学到的不止技术,也包括其他很多方面的东西,确实成长了很多,渐渐地可以对很多事情独当一面。当然,还是挺怂的哈哈,对很多事情还是没办法果断地去做决定,希望以后慢慢地可以做得更好吧,以他为目标继续成长。
希望有缘江湖再见。