优化limit分页(延迟关联)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wang_wxd/article/details/78527255

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


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

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

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

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

普通用时0.007s


延迟关联用时0.003s



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

普通用时0.046s


延迟关联用时0.007s

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

普通用时1.131s

延迟关联用时:0.043s

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




还有另外一种方式

展开阅读全文

没有更多推荐了,返回首页