降低分页操作的数据库成本

12月 9th, 2009 | Posted by | Filed under 数据库

本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明
网址: http://www.penglixun.com/tech/database/reduce_paging_database_cost.html

review代码发现一些分页操作中存在SELECT * RROM tbl ORDER BY id DESC LIMIT N,M; 这样的SQL
当翻页很多时, N就会变得很大,这样每次MySQL都要丢弃很多结果集,造成浪费,性能会有很多下降。

其实可以发现,在插入修改并发不大时,每一页的起始和结束id都是固定的,其实在查询每一页的时候都可以知道下一页和上一页的id大致范围,记住这个id,就可以减小N的值,高并发时可以显著提高效率。

即使需要一次跳多页时,N也只需要 每页条数*跳过页数,比从所有记录中去滤掉前面的记录要好的多。

在网上也看到有人跟我差不多的想法:
http://www.sphinxsearch.org/?p=266

这位老兄阐述的比我清楚,验证了我的想法的正确性,跟开发人员做些交流后进行改进。

标签: , ,
目前还没有任何评论.