8种MySQL分页方法综述

MySQL的分页似乎是个问题。有没有办法优化它在因特网上已经推荐了一些分页方法,但似乎不可行。你能评论一下吗

方法1:直接使用数据库提供的SQL语句

语句样式:在MySQL中,可以使用以下方法:从表中选择*的名称,限制m,n。

适应场景:适用于较少的数据(千分之元组)。

原因/缺点:全表扫描,速度会慢一些数据库结果集返回的不稳定(如返回1,2,3,到2,1,3对方返回),期限是从结果集和其他M位置删除N条输出。

方法2:使用索引创建主键或唯一索引(假设每页10页)。

语句样式:在MySQL中,可以使用以下方法:

复制代码代码如下所示:

从表的SELECT *的名字是id_pk >(pagenum×10)极限M.



——适应场景:它适合大量的数据(上万元组)。

原因:索引扫描,速度会很快。一个朋友建议,因为数据查询是没有根据pk_id排序,所以会有数据缺失的情况下,只有3。

方法3:基于索引重新排序

表式:在MySQL数据库中,可以通过以下方法:选择数据表中的数据,id_pk >(pagenum * 10)的限制,id_pk ASC M.

自适应场景:适用于数据量大的情况(元组数上万)。后顺序是主键或唯一最好的栏目,这样可以消除OrderBy操作指标,但结果是稳定(稳定的意义,请看方法1)。

原因:指数扫描,速度会很快。但MySQL排序操作,只有ASC没有DESC(降序是假的,未来将做真实的描述,期望)。

方法4:使用准备(第一个问号代表pagenum,其次,基于指数)。代表元组数量每页

语句样式:在MySQL中,可以使用以下方法:

复制代码代码如下所示:

准备从SELECT * FROM表名,id_pk > stmt_name(*)为了id_pk

ASC限制M.



-适应场景:大量的数据。

原因:指数扫描,速度会很快。准备语句比普通查询快一点。

方法5:使用MySQL支持订单操作,用索引快速定位部分元组,以避免全表扫描。

-例如:读取第一千到1019行元组(PK是主键/唯一键)。

复制代码代码如下所示:

选择*从your_table PK>=1000阶PK ASC限制0,20。



方法6:使用查询/连接+指数来快速定位它的位置,然后读取元组。同一方法5

-例如(id是主键/唯一键,蓝色字体变量):

利用子查询的例子:

复制代码代码如下所示:

SELECT * fromyour_table <= whereid

(selectid fromyour_table秩序

byid desclimit($ page-1)* $ PageSize orderbyid desc

限制为美元



使用连接示例:

复制代码代码如下所示:

SELECT * fromyour_table asT1

加入(selectid fromyour_table OrderBy)

我desclimit($ page-1)* $ PageSize AST2

哪里

t2.id orderbyt1.id desclimit PageSize t1.id美元;



方法7:存储过程类(最好与上述方法融合,5 6)

语句样式:不再给出

-适应场景:大量数据。作者推荐的方法

原因:操作被封装在服务器中,速度相对较快。

方法8:反面方法

--有人在互联网上使用sql_calc_found_rows.no原因,不要模仿。

基本上,它可以扩展到所有数据库,而事实是相同的。但是,方法5不太可能扩展到其他数据库。前提是,其他数据库通过可以直接与索引排序的操作来支持订单。