MySQL分页技术、6种分页方法总结

 更新时间:2015年07月02日 11:34:46   投稿:junjie  
这篇文章主要介绍了MySQL分页技术、6种分页方法总结,本文总结了6种分页的方法并分别一一讲解它们的特点,需要的朋友可以参考下

概述

有朋友问: MySQL的分页似乎一直是个问题,有什么优化方法吗?
网上看到赶集网XX推荐了一些分页方法,但似乎不太可行,你能点评一下吗?

方法总结

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

语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N
适应场景: 适用于数据量较少的情况(元组百/千级)
原因/缺点: 全表扫描,速度会很慢 且 有的数据库结果集返回不稳定(如某次返回1,2,3,另外的一次返回2,1,3). Limit限制的是从结果集的M位置处取出N条输出,其余抛弃.

方法2: 建立主键或唯一索引, 利用索引(假设每页10条)

语句样式: MySQL中,可用如下方法: SELECT FROM 表名称 WHERE id_pk > (pageNum10) LIMIT M
适应场景: 适用于数据量多的情况(元组数上万)
原因: 索引扫描,速度会很快. 有朋友提出: 因为数据查询出来并不是按照pk_id排序的,所以会有漏掉数据的情况,只能方法3

方法3: 基于索引再排序

语句样式: MySQL中,可用如下方法: SELECT FROM 表名称 WHERE id_pk > (pageNum10) ORDER BY id_pk ASC LIMIT M
适应场景: 适用于数据量多的情况(元组数上万). 最好ORDER BY后的列对象是主键或唯一所以,使得ORDERBY操作能利用索引被消除但结果集是稳定的(稳定的含义,参见方法1)
原因: 索引扫描,速度会很快. 但MySQL的排序操作,只有ASC没有DESC(DESC是假的,未来会做真正的DESC,期待…).

方法4: 基于索引使用prepare(第一个问号表示pageNum,第二个?表示每页元组数)
语句样式: MySQL中,可用如下方法: PREPARE stmt_name FROM SELECT FROM 表名称 WHERE id_pk > (? ?) ORDER BY id_pk ASC LIMIT M
适应场景: 大数据量
原因: 索引扫描,速度会很快. prepare语句又比一般的查询语句快一点。

方法5: 存储过程类(最好融合上述方法4)

语句样式: 不再给出
适应场景: 大数据量. 作者推荐的方法
原因: 把操作封装在服务器,相对更快一些。

方法6: 反面方法

网上有人写使用 SQL_CALC_FOUND_ROWS。 没有道理,勿模仿

相关文章

  • 在CentOS上MySQL数据库服务器配置方法

    在CentOS上MySQL数据库服务器配置方法

    最近工作中经常需要使用到MySQL,有时候在WINXP,有时候在Linux中,而这次,需要在CentOS中配置一下,还需要用到phpmyadmin, 在网上搜了不少的资料。
    2010-04-04
  • 忘记Mysql密码的解决办法小结

    忘记Mysql密码的解决办法小结

    最近老是忘记mysql密码。网上学习了四种解决办法,记录下来。分享给大家
    2014-07-07
  • MySql中的常用参数查询

    MySql中的常用参数查询

    这篇文章主要介绍了MySql中的常用参数查询,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • MySQL中的临时表与内存表

    MySQL中的临时表与内存表

    这篇文章主要介绍了MySQL中的临时表与内存表,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • MySQL的源码安装及使用UDFs进行数据自动更新的教程

    MySQL的源码安装及使用UDFs进行数据自动更新的教程

    UDFs即是MySQL的用户自定义函数的缩写,配合触发器可以自动更新Memcached与MySql的数据,这里我们就来总结一下MySQL的源码安装及使用UDFs进行数据自动更新的教程:
    2016-07-07
  • insert...on duplicate key update语法详解

    insert...on duplicate key update语法详解

    本文主要介绍了insert...on duplicate key update语法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • 如何通过SQL找出2个表里值不同的列的方法

    如何通过SQL找出2个表里值不同的列的方法

    本篇文章对如何通过SQL找出2个表里值不同的列的方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • mysql 8.0.22 zip压缩包版(免安装)下载、安装配置步骤详解

    mysql 8.0.22 zip压缩包版(免安装)下载、安装配置步骤详解

    这篇文章主要介绍了mysql 8.0.22 zip压缩包版(免安装)下载、安装配置步骤详解,本文分步骤通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • MySQL修改数据表存储引擎的3种方法介绍

    MySQL修改数据表存储引擎的3种方法介绍

    这篇文章主要介绍了MySQL修改数据表存储引擎的3种方法介绍,分别是直接修改、导出导入、创建插入3种方法,需要的朋友可以参考下
    2014-07-07
  • innodb如何巧妙的实现事务隔离级别详解

    innodb如何巧妙的实现事务隔离级别详解

    隔离是ACID(Atomicity,Consistency,Isolation,Durability)的重要部分,下面这篇文章主要给大家介绍了关于innodb如何巧妙的实现事务隔离级别的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-11-11

最新评论