问题:当我的数据十分多(海量),此时分页若还是使用limit N,M的方式,会特别的慢且浪费资源

实际体验

  • 写在前面:工作提供成长环境呀,我这边有500万的数据,是当时做雨润某个报表业务时拉取下来的。

image.png

  • 书写一个正常分页的语句

image.png

  • 这条SQL是跑了6.786s

优化方式1(阿里巴巴手册)

  • 先只对id(主键)进行分页,得到临时表 tmp(id)
  • 我再将原数据表jointmp(id)表 ```sql select a.* from molistinfo a inner join ( select id from molistinfo limit 4000000,10 ) b on a.id = b.id;
  1. ![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)
  2. <a name="z4VIu"></a>
  3. ## 优化方式2
  4. - id是自增时
  5. - 且允许每页数据可能不足10条(id是中间可能有跳跃)
  6. ```sql
  7. select *
  8. from molistinfo
  9. where id>=4000000 limit 10;

image.png

总结

  • 优化方式1:通用
  • 优化方式2:局限性大,但是最快