seo网站优化专员桂林象鼻山水月洞
news/
2025/9/27 22:36:36/
文章来源:
seo网站优化专员,桂林象鼻山水月洞,免费奖励自己的网站,沈阳市网站建设报价PERCONA PERFORMANCE CONFERENCE 2009上#xff0c;来自雅虎的几位工程师带来了一篇”Efficient Pagination Using MySQL“的报告#xff0c;有很多亮点#xff0c;本文是在原文基础上的进一步延伸。首先看一下分页的基本原理#xff1a;mysql explain SELECT * FROM m…PERCONA PERFORMANCE CONFERENCE 2009上来自雅虎的几位工程师带来了一篇”Efficient Pagination Using MySQL“的报告有很多亮点本文是在原文基础上的进一步延伸。首先看一下分页的基本原理mysql explain SELECT * FROM message ORDER BY id DESC LIMIT 10000, 20\G***************** 1. row **************id: 1select_type: SIMPLEtable: messagetype: indexpossible_keys: NULLkey: PRIMARYkey_len: 4ref: NULLrows: 10020Extra:1 row in set (0.00 sec)limit 10000,20的意思扫描满足条件的10020行扔掉前面的10000行返回最后的20行问题就在这里如果是limit 100000,100需要扫描100100行在一个高并发的应用里每次查询需要扫描超过10W行性能肯定大打折扣。文中还提到limit n性能是没问题的因为只扫描n行。文中提到一种”clue”的做法给翻页提供一些”线索”比如还是SELECT * FROM message ORDER BY id DESC按id降序分页每页20条当前是第10页当前页条目id最大的是9527最小的是9500如果我们只提供”上一页”、”下一页”这样的跳转(不提供到第N页的跳转)那么在处理”上一页”的时候SQL语句可以是SELECT * FROM message WHERE id 9527 ORDER BY id ASC LIMIT 20;处理”下一页”的时候SQL语句可以是SELECT * FROM message WHERE id 9500 ORDER BY id DESC LIMIT 20;不管翻多少页每次查询只扫描20行。缺点是只能提供”上一页”、”下一页”的链接形式但是我们的产品经理非常喜欢””这样的链接方式怎么办呢如果LIMIT m,n不可避免的话要优化效率只有尽可能的让m小一下我们扩展前面的”clue”做法还是SELECT * FROM message ORDER BY id DESC按id降序分页每页20条当前是第10页当前页条目id最大的是9527最小的是9500比如要跳到第8页我看的SQL语句可以这样写SELECT * FROM message WHERE id 9527 ORDER BY id ASC LIMIT 20,20;跳转到第13页SELECT * FROM message WHERE id 9500 ORDER BY id DESC LIMIT 40,20;原理还是一样记录住当前页id的最大值和最小值计算跳转页面和当前页相对偏移由于页面相近这个偏移量不会很大这样的话m值相对较小大大减少扫描的行数。其实传统的limit m,n相对的偏移一直是第一页这样的话越翻到后面效率越差而上面给出的方法就没有这样的问题。注意SQL语句里面的ASC和DESC如果是ASC取出来的结果显示的时候记得倒置一下。已在60W数据总量的表中测试效果非常明显。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/920035.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!