大数据量下,如何优化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];

你可能感兴趣的:(大数据量下,如何优化mysql的分页查询)