大数据量下,如何优化mysql的分页查询

/********* 查询第1001页的10条数据 ********/
# 原生sql语句(limit offset,rows)
select * from auth_user limit (1001-1)*10,10;

# django orm语句(与上述原生sql等价)
User.objects.all()[10000,10010]

如上述,许多网站的分页功能的底层实现就是依赖前端给后端传来一些参数,比如起始页和页面大小,来结合limit控制分页。

但是,在大数据量下,就会出现查询效率问题!!!因为上述语句实际底层执行是从第一行开始找到10010行,再抛弃前面的10000行。故当用户往后翻到1001页时,偏移量offset就会很大(10000),实际执行效率很慢。

一般地,替代方法如下:where语句设置起始位,limit控制行数。

select * from auth_user where id >= 10000  limit 10;

User.objects.filter(id__gte=10000)[0,10];
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 分页功能是很常见的功能,特别是当数据量越来越大的时候,分页查询是必不可少的。实现分页功能有很多种方式,如果使用的O...
    Java黎先生阅读 9,474评论 1 8
  • 当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使...
    youyouzh阅读 3,907评论 0 0
  • 哥哥 你约我晚上爬山 我后悔 上次没有出来 现在我知道了 你想给我看的东西有多美 哥哥 是我对不起你 对你冷漠 离...
    刘piano阅读 1,670评论 0 0
  • 文/源琪琪 小飞蛾在黑暗中飞了很久,精疲力尽地它努力的寻找着光明。突然它看到了奄奄一息的火焰,靠近它,竟感受到从未...
    源源de源琪琪阅读 3,964评论 2 8
  • 像是极其乖巧的孩子 在你的心里静静地待着 不捣乱也不吵闹 就在你的心里 和你同吃同穿同住 用一个厨房 去一个卫生间...
    怹友阅读 1,352评论 0 0