News center
资讯中心
资讯中心当前位置:首页>>资讯详情
百万级数据,分页如何处理?
发布:武汉灵犀教育发布时间:2019-06-25
假定有三张表:goods(商品表)、user(用户表)、g_u(选购商品记录表)
三张表结构设计如下图:
为了方便进行后续的测试,批量创建2000000条测试数据,模拟一次百万级的数据查询场景。
现在有一个业务场景,需要对g_u表里面的数据进行分页查询,通常会想到的方式是通过下列语句:
SELECT * from g_u as gu ORDER BY id limit 1850000,100;
经测试,查询时间为:
当搜索的数据越靠后的时候,搜索速度就会越低,这个时候,适当的创建索引就显得比较重要了。
由于查询的时候,使用的是根据主键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在运行的时候借助了主键索引,所以效率提升明显。