MySQL分页分析的原理与效率
MySQL分页分析的原理与效率在Percona性能会议2009、雅虎几个工程师带来了使用MySQL高效分页的报告,其中有许多亮点。本文是在原有基础上的进一步扩展。
首先,看看分页的基本原理:
>解释MySQL SELECT * FROM ID DESC LIMIT 10000, 20 G消息顺序
***************** 1。行**************
编号:1
select_type:简单
表:消息
类型:指数
possible_keys:空
关键词:小学
key_len:4
参考:空
行数:10020
额外的:
1行集(0秒)
10020限制10000,20手段对符合条件的10000线扫描,扔在回归前的最后20行,问题就在这里,如果是限制100000100,扫描100100行,在一个高度并行的应用程序,每个查询需要扫描超过10W,性能会大大降低。在这篇文章中,极限性能是没有问题,因为只有N线扫描它也提到。
一个线索的方法,本文中提到的,页面提供一些线索,如选择或由ID * DESC消息顺序、ID按降序分页,20页,当前是第十页,该页的条目ID最高是9527,最低是9500,如果我们只提供这种跳(不提供的N页,然后跳)在处理SQL语句可以:
从ID为9527的ID为20的消息中选择*;
在处理时,SQL语句可以是:
SELECT * FROM消息ID<9500订单ID DESC LIMIT 20;
不管翻过多少页,每次只扫描20行。
缺点是它只能提供链接的形式,但是我们的产品经理非常喜欢这种链接方式,我们该怎么办呢
如果极限m n,不可避免地,优化效率,只有尽可能的让米小,我们延续之前的线索,或通过ID * DESC消息顺序选择,ID按降序分页,20页,当前是第十页,该页的条目ID的最大值是9527,9500,例如最小,跳到第八页,我看到SQL语句可以写:
SELECT * FROM消息ID > 9527订单ID ASC限制20,20;
跳转到第第十三页:
SELECT * FROM消息ID<9500订单ID DESC LIMIT 20;
原理是一样的。它记录当前页id的最大值和最小值,计算跳转页面和当前页之间的相对偏移量。因为页面是相似的,所以偏移量不大,所以m值相对较小,这大大减少了扫描行数。实际上,传统的限制m和n的相对偏移总是第一页。这样的话翻到后面,效率就更差了,上面的方法就没有这个问题了。
注意在SQL语句中,ASC和DESC,如果是ASC的结果,记得要反它当它显示。
它已经在一个表的总60w数据测试,而且效果非常明显。
谢谢你的阅读。我希望你能帮助你,谢谢你对这个站的支持。