mysql分页原理与高效mysql分页查询语句
第一部分:分页的基本原理:
复制代码代码如下所示:
MySQL解释选择*从ID DESC LIMIT 10000, 20消息顺序
***************** 1。行**************
编号:1
select_type:简单
表:消息
类型:指数
possible_keys:空
关键词:小学
key_len:4
参考:空
行数:10020
额外的:
1行集(0秒)
为了说明上述MySQL声明:10020限制10000,20扫描方式对符合条件的,10000条线走在回归前的最后20行,问题就在这里,如果是限制100000100,扫描100100行,在一个高度并行的应用程序,每个查询需要扫描超过10W,一定的折扣的性能。在文章中,极限性能是没有问题,因为只有N线扫描它也提到。
第二部分:根据雅虎的工程师带来了高效的分页使用MySQL的报告内容提到一个线索延伸:本文实践,网页提供一些线索,如选择或由ID * DESC消息顺序、ID按降序分页,20页,当前第十页。id是最大的1020页条目,最小值是1000,如果我们只提供一个页面,那么下一个页面即跳转(不提供给N页,然后跳转)SQL语句在一个页面中可以:
复制代码代码如下所示:
从ID为1020的ID为20的消息中选择*
在处理下一页时,SQL语句可以是:
复制代码代码如下所示:
SELECT * FROM消息ID<1000订单ID DESC LIMIT 20; / /上一页
不管翻过多少页,每次只扫描20行。
缺点是我们只能提供上一页和下一页之间的链接。但是我们的产品经理喜欢第123456789页和下一页。我该怎么做
如果极限m n,不可避免地,优化效率,只有尽可能的让米小,我们延续之前的线索,或通过ID * DESC消息顺序选择,ID按降序分页,20页,当前是第十页,该页的条目ID的最大值是2519,这最小的2500;
当第十页是SQL如下:
复制代码代码如下所示:
SELECT * FROM tb_goods_info哪里auto_id > = 2500阶的auto_id ASC限制0,20
例如,要跳转到第九页,可以用这种方式编写SQL语句:
复制代码代码如下所示:
SELECT * FROM tb_goods_info哪里auto_id<2500为auto_id DESC LIMIT 0,20
例如,要跳转到第八页,可以用这种方式编写SQL语句:
复制代码代码如下所示:
SELECT * FROM tb_goods_info哪里auto_id<2500为auto_id DESC LIMIT 20,20
例如,要跳转到第七页,可以用这种方式编写SQL语句:
复制代码代码如下所示:
SELECT * FROM tb_goods_info哪里auto_id<2500为auto_id DESC LIMIT 20
跳转到第第十一页:
复制代码代码如下所示:
SELECT * FROM tb_goods_info哪里auto_id > 2519阶的auto_id ASC限制0,20
跳转到第第十二页:
复制代码代码如下所示:
SELECT * FROM tb_goods_info哪里auto_id > 2519阶的auto_id ASC限制20,20
跳转到第第十三页:
复制代码代码如下所示:
SELECT * FROM tb_goods_info哪里auto_id > 2519阶的限制auto_id ASC 20
原理是一样的。它记录当前页id的最大值和最小值,计算跳转页面和当前页之间的相对偏移量。因为页面是相似的,所以偏移量不大,所以m值相对较小,这大大减少了扫描行数。实际上,传统的限制m和n的相对偏移总是第一页。这样的话翻到后面,效率就更差了,上面的方法就没有这个问题了。
注意在SQL语句中,ASC和DESC,如果是ASC的结果,记得要反它当它显示。
它已经在一个表的总60w数据测试,而且效果非常明显