mysql查询时, 使用limit进行分页查询, 会丢弃前面查询的数据只返回符合limit条件的记录,

在数据表头时查询快,分页越往后,需要查询并丢弃的记录越多,查询性能越慢.

方式一:

延迟关联,通过查询主键ID来减少回表, t表使用辅助索引create_time只返回ID,减少回表,再只根据主键ID索引查询数据

select 
    * 
from TABLEA a,
(select id from TABLEA orderby create_time desc limit 400000,10) t 
where a.id = t.id

方式二:

基于唯一列进行定位. 缺点时必须计算出起始位置,不能跳页查询. 399999是上一页的最后的记录ID

select * from TABLEA where id > 399999 limit 0,10

方式三:

业务限制.

再查询界面,最多只显示100页, 不要随意翻到30W页后. 适用于大概率不需要关注1W页后的数据

方案四:

使用ES或ChickHouse等分布式数据库.

文章作者: 刘同学
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 刘同学的小站
数据库 Mysql oracle
喜欢就支持一下吧