咨询电话:15629116585(9:00-21:00)咨询QQ:272876 交流QQ群:87780123
微信

关注我们
在线咨询购买 | 注册 | 登录

武汉灵犀教育

百万级数据,分页如何处理? - 武汉灵犀教育

News center
资讯中心

资讯中心当前位置:首页>>资讯详情

百万级数据,分页如何处理?
发布:武汉灵犀教育发布时间:2019-06-25

数据库里面的数据由于长期的堆积,导致数据量不断的上升,而后台的系统每次进行分页查询的时候,效率都会降低很多。

导致效率降低的原因,通常都是由于采取传统物理分页 limit n,m 的方式。

假定有三张表:goods(商品表)、user(用户表)、g_u(选购商品记录表)

三张表结构设计如下图:


用户和商品之间的关系维持在了一对多的g_u表关联中。

为了方便进行后续的测试,批量创建2000000条测试数据,模拟一次百万级的数据查询场景。

现在有一个业务场景,需要对g_u表里面的数据进行分页查询,通常会想到的方式是通过下列语句:

SELECT * from g_u as gu ORDER BY id limit 1850000,100;

经测试,查询时间为:



当搜索的数据越靠后的时候,搜索速度就会越低,这个时候,适当的创建索引就显得比较重要了。

先来做一次explain的sql检测,检测结果如下:


由于查询的时候,使用的是根据主键ID索引进行排序,因此查询的时候key一项为PRIMARY。

SELECT * FROM g_u WHERE id >=(SELECT id FROM g_u LIMIT 1850000,1) ORDER BY id  LIMIT 100;


查询效率有了提升,但依然缓慢,通过执行explain分析结果如下:


子查询用到了索引,外部查询用到了where的辅助索引。

最后通过利用主键ID来提升查询效率: 

SELECT * FROM g_u as gu WHERE gu.id>($firstId+$pageSize*$pageSize)  limit 100

查询时间如下:

再次执行explain计划,sql在运行的时候借助了主键索引,所以效率提升明显。