问题:当我的数据十分多(海量),此时分页若还是使用limit N,M的方式,会特别的慢且浪费资源
实际体验
- 写在前面:工作提供成长环境呀,我这边有500万的数据,是当时做雨润某个报表业务时拉取下来的。
- 书写一个正常分页的语句
- 这条SQL是跑了6.786s
优化方式1(阿里巴巴手册)
- 先只对id(主键)进行分页,得到临时表
tmp(id)
- 我再将原数据表
join
上tmp(id)
表 ```sql select a.* from molistinfo a inner join ( select id from molistinfo limit 4000000,10 ) b on a.id = b.id;
![image.png](https://cdn.nlark.com/yuque/0/2022/png/1609516/1646742499986-37a9c8b0-3bd3-44a6-bdc4-c1e93d0a9b8e.png#clientId=u151e266d-5f1c-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=677&id=ubab2403a&margin=%5Bobject%20Object%5D&name=image.png&originHeight=762&originWidth=1255&originalType=binary&ratio=1&rotation=0&showTitle=false&size=187427&status=done&style=none&taskId=u5c65b6ad-9d2a-46ff-bc3a-19a4b910b79&title=&width=1115.5555555555557)
<a name="z4VIu"></a>
## 优化方式2
- 当id是自增时
- 且允许每页数据可能不足10条(id是中间可能有跳跃)
```sql
select *
from molistinfo
where id>=4000000 limit 10;
总结
- 优化方式1:通用
- 优化方式2:局限性大,但是最快