`
_与狼共舞
  • 浏览: 59010 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

MySQL的分页技术总结

    博客分类:
  • SQL
阅读更多

方法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 > (pageNum*10) LIMIT M

  ---适应场景适用于数据量多的情况(元组数上万)

  ---原因: 索引扫描,速度会很快。有朋友提出因为数据查询出来并不是按照pk_id排序的,所以会有漏掉数据的情况,只能方法3

 

方法3: 基于索引再排序

  ---语句样式: MySQL,可用如下方法: SELECT * FROM 表名称 WHERE id_pk > (pageNum*10) 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:利用MySQL支持ORDER操作可以利用索引快速定位部分元组,避免全表扫描

  ---比如: 读第10001019行元组(pk是主键/唯一键)

  ---SELECT * FROM your_table WHERE pk>=1000 ORDER BY pk ASC LIMIT 0,20

 

方法6: 利用"子查询/连接+索引"快速定位元组的位置,然后再读取元组. 道理同方法5

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

  利用子查询示例:

 

 

 

SELECT * FROM your_table WHERE id <=

(SELECT id FROM your_table ORDER

BY id desc LIMIT ($page-1)*$pagesize ORDER BY id desc

LIMIT $pagesize

  利用连接示例:

 

 

 

 

SELECT * FROM your_table AS t1

JOIN (SELECT id FROM your_table ORDER BY

id desc LIMIT ($page-1)*$pagesize AS t2

WHERE

t1.id <= t2.id ORDER BY t1.id desc LIMIT $pagesize;

 

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

  ---语句样式不再给出

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

  ---原因: 把操作封装在服务器,相对更快一些。

 

方法8: 反面方法

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

  基本上,可以推广到所有数据库,道理是一样的。但方法5未必能推广到其他数据库,推广的前提是,其他数据库支持ORDER BY操作可以利用索引直接完成排序。

2
6
分享到:
评论
1 楼 bitray 2016-04-06  
只要数据不连续,你这排序毫无意义啊id是10以内的就2条,剩下都是1000的,你连续好多页没数据啊

相关推荐

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

    有朋友问: MySQL的分页似乎一直是个问题,有什么优化方法吗? 网上看到赶集网XX推荐了一些分页方法,但似乎不太可行,你能点评一下吗? 方法总结 方法1: 直接使用数据库提供的SQL语句 语句样式: MySQL中,可用如下方法...

    php分页技术

    php和MYSQL面向过程分页技术总结: 首页&lt;/a&gt;&nbsp;&nbsp;留言&lt;/a&gt;&nbsp;&nbsp;后台登陆 &lt;marquee direction=left&gt;给我留言吧 ^_^ ......&lt;/marquee&gt; include 'conn.php'; $perNumber=2; //每页显示的...

    MySQL 5权威指南(第3版) 中文版 下载地址

     1.7 小结  第2章 测试环境  2.1 是Windows还是UNIX/Linux  2.2 在Windows系统上安装MySQL和相关软件  2.3 在SUSE Linux 9.3系统上安装MySQL和相关软件  2.4 在Red Hat Enterprise Linux 4系统上安装...

    PHP网络编程技术与实践 源码

    1.6 本章小结 第2章 PHP的语法结构和常用函数 2.1 PHP语法基础 2.1.1 PHP的基本语法 2.1.2 PHP的数据类型 2.1.3 PHP的常量 2.1.4 PHP的变量 2.1.5 PHP的表达式 2.1.6 PHP的流程控制 2.2 PHP的数据存储处理 2.2.1 ...

    新闻博客系统毕业论文

    [Keywords] the portal system, press releases modules, user management blog 目 录 ...4.3.3 分页技术 33 第5章 总结 35 5.1 系统总结 35 5.2 个人总结 35 5.3 下一步工作 36 参考文献 37 致谢 38

    java之jdbc总结

    在学习Java的过程中,面对用Java操作数据库的时候,难免会遇见对于数据库连不上的问题,这是本人在学习过程中的一些总结,专门针对Java操作数据库的内容,包括jdbc的链接,分页,MySQL的存储过程等,仅供参考,不...

    JSP 程序设计从入门到精通 PDF 教程

     3.5 本章小结 62  第4章Jsp与Servlet 62  4.1 什么是Servlets 63  4.1.1 JavaServlet的解释 63  4.1.2 什么是Jsp 65  4.1.3 得到一个Servlets和JSP的运行环境 66  4.1.4 实现第一个JSP和SERVELT 67 ...

    JDBC 3.0数据库开发与设计

    目录 第1章 JDBC概述 1.1 JDBC简介 1.2 JDBC3.0规范 1.3 JDBC3.0 API的新特点 1.3.1 JDBC 3.0 API的一致性 1.3.2 不赞成的API 1.4 JDBC 3.0中的类和接口 1.4.1 java.sql包中的类和接口及其...9.5 本章小结

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     1.3 小结  1.4 思考题 第2章 Java对象持久化技术概述  2.1 直接通过JDBC API来持久化实体域对象  2.2 ORM简介  2.2.1 对象-关系映射的概念  2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 ...

    PHP程序开发范例宝典III

    6.12 分页技术 270 实例175 查询结果的分页显示 271 实例176 单击页码跳转到指定页 272 实例177 输入页码跳转到指定页 275 实例178 超长文本的分页显示 276 实例179 查询结果的分栏显示 278 实例180 ...

    达内Java培训项目(当当网/通用电子商务系统)

    技术实现:Struts2、JSP、MySQL、Jquery、Javascript、Ajax 、Json、JUnit 项目描述: 本项目主要实现了用户管理模块、商品分类展示模块、购物车模块、订单模块。 用户管理模块实现了用户注册、实时验证、用户登录...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     1.3 小结  1.4 思考题 第2章 Java对象持久化技术概述  2.1 直接通过JDBC API来持久化实体域对象  2.2 ORM简介  2.2.1 对象-关系映射的概念  2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     1.3 小结  1.4 思考题 第2章 Java对象持久化技术概述  2.1 直接通过JDBC API来持久化实体域对象  2.2 ORM简介  2.2.1 对象-关系映射的概念  2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     1.3 小结  1.4 思考题 第2章 Java对象持久化技术概述  2.1 直接通过JDBC API来持久化实体域对象  2.2 ORM简介  2.2.1 对象-关系映射的概念  2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 ...

    史上最全韩顺平传智播客PHP就业班视频,10月份全集

    10-20 8 smarty分页技术 10-20 9 10-22 1 ajax介绍 无刷新验证用户名 10-22 2 ajax如何处理xml格式返回数据 10-22 3 json 10-22 4 ajax如何处理json格式返回数据 10-22 5 ajax应用 省市联动 10-22 6 ajax应用 黄金...

    (全)传智播客PHP就业班视频完整课程

    10-20 8 smarty分页技术 10-20 9 10-22 1 ajax介绍 无刷新验证用户名 10-22 2 ajax如何处理xml格式返回数据 10-22 3 json 10-22 4 ajax如何处理json格式返回数据 10-22 5 ajax应用 省市联动 10-22 6 ajax应用 黄金...

    史上最全传智播客PHP就业班视频课,8月份视频

    10-20 8 smarty分页技术 10-20 9 10-22 1 ajax介绍 无刷新验证用户名 10-22 2 ajax如何处理xml格式返回数据 10-22 3 json 10-22 4 ajax如何处理json格式返回数据 10-22 5 ajax应用 省市联动 10-22 6 ajax应用 黄金...

Global site tag (gtag.js) - Google Analytics