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不太可能扩展到其他数据库。前提是,其他数据库通过可以直接与索引排序的操作来支持订单。