方案1
先查ID,再查询想要的字段,前提ID为索引列
SELECT id, name, mobile... FROM t_customer t INNER JOIN
(select id from t_customer t LIMIT 2500000,10) AS page on t.id = page.id;
或者
分2次查询
select id from t_customer t LIMIT 2500000,10;
SELECT id, name, mobile... FROM t_customer where id in(1,2,3)
- 缺点:子查询必须要快
方案2
禁用直接跳页功能,根据已知最大ID查询下一页
select id, name, mobile... from t_customer t where t.id > 100000 order by t.id asc LIMIT 0,10;
<1,2,4,5,6,7,8,9,10> 类似这种分页直接根据最大ID推断
- 缺点:禁用跳页,必须有满足查询条件可以推断
方案3
根据查询条件使用表分区
- 缺点:必须根据合理的查询条件,设计表分区
方案4
需求剪裁,请问你为啥要获取到这么大分页数据,很多大型网站都只给你显示100页。
- 缺点:和产品经理需要好好沟通
方案5
分表分库
- 缺点:重构
资料
- SQL语句为什么使用select * 会降低查询速度?
- MySQL limit分页查询优化写法
- 高效的MySQL分页
- MySQL · 参数优化 ·RDS MySQL参数调优最佳实践
- 10分钟让你明白MySQL是如何利用索引的