mysql性能优化-limit分页

目录
  1. 问题
  2. 分析解决
  3. 解决方案

问题

平台在主数据量不大的情况下遇到了MySQL limit较大偏移量分页查询极慢的情况。

分析解决

该查询语句存在的一些问题

问题1:

查询使用的 select *,虽然知道从性能角度来说应该用什么查什么,但项目非大数据类的项目,可见项目生命周期内也不会有超大量数据,因此为加快开发效率还是使用了select *。

问题2:

表中存在部分大字段,limit m, n 使得结果集查询了 m + n 的数据,并将 m 以前的数据抛弃。配合第一个问题,导致了 m 较大时查询非常慢。

实际项目中,这些字段当前也没有了使用需求,因此予以删除,基本解决了查询慢的问题。同时该表字段过多,近100个,会在后续的改版优化中进行拆分。

因为遇到了分页查询慢的问题,顺便整理收集了一下真正大量数据下的分页优化方案。

解决方案

1
select * from table_name inner join ( select id from table_name where xxx=yyy limit 200000,10) b using (id)

还有一些缩减查询范围 和 使用子查询的一些方法,有诸多限制,因此就没有记录。

当然有些时候大量数据查询场景可以避免,上家公司千万级的数据就通过归档数据减少数据库压力,也可以缩减业务查询范围避免大量数据查询。