MySQL高级分页(高级mysql分页)

在叶子文章中,我们讨论了使用内部连接来减少页面的扫描,这是为了减少所谓的后台表:

复制代码代码如下所示:

SELECT * FROM ` T1 `内连接(选择ID从` T1 `通过id倒序)



通过直接操作ID而不是整个表,id连接被条件ID抓取,然后数据通过id进行爬行,从而避免了不需要的页面的扫描。

但这不是减少ID范围范围的最佳方法,例如:

我们得把100个记录分成一页来写。



复制代码代码如下所示:

page_size美元= 100选择*从那里通过ID ASC限制page_size美元标识>序。



尽量避免限制m和n。这种写MySQL的方式非常不人道。当m值很大,偏移量很小时,尽量不要使用偏移量来获得特定的行数。

这里有一个问题,例如,根据不是唯一索引的列页,可能存在问题。例如,当一列列1有11键= 100的值,则最小值后限制n值相同的利用你。

你如何处理这种情况举个例子:

例如,每10条记录应分为一页。



复制代码代码如下所示:

SELECT * FROM t为column1 DESC LIMIT 10



请注意,这里的最小值或100(11连续100)会对下列分页产生影响,以及如何处理它

雅虎给出的解决方案非常适合取额外的列,例如PK或唯一索引键,例如:



复制代码代码如下所示:

SELECT * FROM t为column1降序,ID DESC LIMIT 10——第一页

SELECT * FROM t其中column1 <= minvalue_col1和(ID<minvalue_id或column1 < minvalue_col1)10 --二页



这确保了唯一性,确保每个页面的数据不会重复。这个想法得到了额外的边界值增加,并与列分页,额外的。

SQL也可以优化。



复制代码代码如下所示:

选择平方米。*从M1,M2,不m1.id = m2.id和m1.column1 <= minvalue_col1

和(m1.id < minvalue_id或m1.column1 < minvalue_col1)的m1.column1倒序,m1.id desc 10;



核心思想:通过额外的过滤和ID扫描来避免大量的后台操作,所以扫描了多少条(页面)