PERCONA PERFORMANCE CONFERENCE 2009上,来自雅虎的几位工程师带来了一篇”Efficient Pagination Using MySQL“的报告,有很多亮点,本文是在原文基础上的进一步延伸。
首先看一下分页的基本原理:
mysql> explain SELECT * FROM message ORDER BY id DESC LIMIT 10000, 20G
***************** 1. row **************
id: 1
select_type: SIMPLE
table: message
< 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数据总量的表中测试,效果非常明显。
(CGFinal.com原创,本文原文见[url]http://dev.cgfinal.com/sphinx/sphinx.html)[/url]
版权 ? 2008 Dony,,版权所有,转载请声明来源与作者
2008-01-17
目录
1. Sphinx简介
1.1. 什么是全文检索
1.2. 介绍
1.3. Sphinx的特性
2. Sphinx安装(For MySQL)
2.1. Windows下安装
2.2. Linux下安装 3. 实例说明
4. Sphinx配置
5. 运行Sphinx
转自: http://blog.ifeng.com/article/3388402.html
一次与朋友聊天, 朋友说,做日本女人是最为辛苦的,而且地位低下。我想有类似看法的中国人肯定还不少。我们常常从电影、小说及其他的传媒里看到的也确实是,日本女人只是相夫教子,只做贤内助,伺侯丈夫,抚养孩子,对外面的世界参与很少而且甚至了解也很少。日本女人,无论多么优秀,事业多么红火,只要嫁人有孩子,就立即中断事业,自己解除职业,回家相夫教子去了。上个世纪八十年代日本最红的女演员山口百惠在嫁人后就立即退出了影坛,安心做她的家庭主妇去了。这与中国女人,那种