优化limit分页(延迟关联)

limit'分页有一个问题就是当偏移量较大时查询遍历的数据越多,效率会逐渐降低,例如limit 1000,10这样的查询这时MYSQL需要查询出1020条记录然后只返回最后20条,前面的1000条记录都会被抛弃,代价较高。如果每个分页被访问的数据频率都相同要优化这种查询要么是在页面中限制分页的数量要么是优化大偏移量的性能。


优化此类分页查询的最简单的一个办法就是尽可能的使用索引覆盖扫描,而不是查询所有的列。然后根据需要做一次关联操作再返回所需的列,对于偏移量很大的时候,这样做的效率会提升很大。以下面的查询作为示例,以主键info_id(主键)作为覆盖的索引

目前表的数据总量是90122条数据

优化limit分页(延迟关联)_第1张图片

接下来我们进行几个分页数据的测试与对比

一:首先是第五十条数据之后获取20条

普通用时0.007s

优化limit分页(延迟关联)_第2张图片

延迟关联用时0.003s

优化limit分页(延迟关联)_第3张图片


二:首先是第五十条数据之后获取5000条

普通用时0.046s

优化limit分页(延迟关联)_第4张图片

延迟关联用时0.007s

优化limit分页(延迟关联)_第5张图片

三:首先是第五十条数据之后获取50000条

普通用时1.131s

优化limit分页(延迟关联)_第6张图片

延迟关联用时:0.043s

优化limit分页(延迟关联)_第7张图片

还有另外一种方式select info_id,info_oldNO,info_title from  zb_projectinfo where info_id >(select info_id from  zb_projectinfo limit 50000,1 )limit 20这样的语句和延迟关联性能差距不大




还有另外一种方式

你可能感兴趣的:(数据库)