`
_与狼共舞
  • 浏览: 61005 次
  • 性别: 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数据库实现分页

    总结,MySQL的分页功能是处理大数据量查询的关键技术,通过合理使用`LIMIT`和`OFFSET`,配合索引优化,可以有效地提高查询效率,提升用户交互体验。同时,随着版本升级,MySQL提供了更多分页策略和技术,如窗口函数...

    asp mysql分页(超完美版本)

    ### ASP与MySQL分页技术详解 #### 一、引言 在Web开发中,当数据量庞大时,一次性展示所有数据不仅会导致页面加载缓慢,还会严重影响用户体验。因此,实现数据的分页显示变得尤为重要。本文将详细介绍如何在ASP...

    MYSQL分页存储过程

    ### MySQL分页存储过程概述 分页存储过程是一种在数据库层面上实现数据分页的技术。相比应用程序级别的分页,它能更高效地处理数据,减少网络传输的数据量,提升系统性能。在MySQL中,我们可以通过创建存储过程来...

    accss, mysql asp通用分页自定义分页样式

    在IT行业中,数据库查询和网页显示往往涉及到大量的数据处理,特别是在网页展示时,为了提高用户体验,通常会采用分页技术。这里的"accss,mysql,asp通用分页,自定义分页样式"就是一个关于如何在ASP(Active ...

    mysql分页 jsp实现 servlet+javabean+jsp三级架构

    本文档对MySQL分页技术进行了总结,讨论了在JSP实现中使用Servlet+JavaBean+JSP三级架构的分页技术的实现方式。文章首先讨论了分页技术的重要性,并且提出了一个基本的分页思路,即获取总记录数、设置每页显示的记录...

    PHP+MYSQL分页代码

    在网页开发中,数据量较大的情况下,为了提高用户体验和页面加载速度,通常会采用分页技术来展示数据。本主题“PHP+MYSQL分页代码”着重讲解如何在PHP后端和MySQL数据库配合下实现高效、实用的分页功能。下面我们将...

    struts2+MySQL分页(精).

    ### Struts2与MySQL分页实现详解 #### 一、背景与目的 随着Web应用的不断发展,用户对于信息展示的需求也越来越高。为了更好地管理和展示大量数据,分页技术成为了一个不可或缺的功能。本文将详细介绍如何利用...

    C++实现MySQL分页查询

    总结来说,C++通过MFC和MySQL Connector/C++库可以方便地实现与MySQL数据库的交互,进行分页查询。这个过程涉及到数据库连接、SQL语句构造、结果集处理以及用户界面的交互。理解并熟练运用这些概念和技术,将有助于...

    JAVA+JSP+MYSQL分页

    总结来说,这个主题涵盖了JAVA后端如何通过调用MYSQL存储过程处理分页查询,以及JSP如何接收并展示这些数据。这样的组合既利用了JAVA的强类型和面向对象特性,也利用了JSP的便捷的视图处理能力,同时通过存储过程...

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

    总结,MySQL分页技术的选择应根据数据量、查询复杂度和系统性能需求来确定。对于大型数据集,建立有效的索引、使用预编译语句或存储过程都是不错的选择。同时,持续关注数据库的性能调优和新特性,如MySQL的优化改进...

    Oracle,SQl,MySql实现分页查询

    在数据库操作中,分页查询是一项非常重要的技术,尤其是在处理大量数据时。本文将基于提供的文件信息,深入探讨三种不同的分页查询方法及其在Oracle、SQL Server(这里用SQL代替)、MySQL中的实现方式,并对它们的...

    mysql存储过程实现分页

    通过分页技术,可以有效地减少每次查询的数据量,提高系统的响应速度和用户体验。MySQL作为一种广泛使用的数据库管理系统,支持通过存储过程的方式来实现分页功能。 #### 存储过程简介 MySQL中的存储过程是一种...

    JSP +MYSQL分页

    在Web开发中,数据量庞大的情况下,为了提高用户体验和页面加载速度,通常会采用分页技术来展示数据。本主题将深入探讨如何结合JavaServer Pages(JSP)和MySQL数据库实现高效、灵活的分页功能。 一、JSP与MySQL...

    jsp+JavaBean+Servlet_Oracle和Mysql分页

    本项目聚焦于使用JSP、JavaBean和Servlet技术,结合Oracle与MySQL两种主流关系型数据库实现分页功能。以下将详细介绍这些技术及其在分页中的应用。 1. JSP(JavaServer Pages):JSP是一种动态网页技术,允许开发...

    oracle mysql分页源码

    在数据库管理领域,分页是实现高效数据检索和呈现大量数据的关键技术。Oracle 和 MySQL 都提供了各自的分页解决方案。本文将深入探讨这两种数据库在分页方面的实现方式,并结合源码分析来阐述其工作原理。 Oracle ...

    eclipse基于mysql分页的方法实现

    因此,采用分页技术来优化用户体验是非常必要的。本文将详细介绍如何在 Eclipse 开发环境中利用 MySQL 数据库实现数据分页功能。 #### 二、关键技术点解析 ##### 1. JSP 页面结构 JSP (Java Server Pages) 是一种...

    jq.ajax+php+mysql实现分页显示数据

    总结来说,实现“jq.ajax+php+mysql实现分页显示数据”的过程主要包括:前端使用jQuery的AJAX发送请求,PHP后端处理请求并从MySQL数据库获取分页数据,再将数据转化为JSON返回给前端,前端解析JSON并动态更新页面。...

    java web mysql 通用分页

    总结起来,实现`java web mysql 通用分页`需要结合前端和后端的协同工作,通过合理的SQL构造和优化,以及良好的用户体验设计,来提供高效、安全且易用的分页功能。在实践中,可以借助各种成熟的框架和工具,如Spring...

    经典的php+mysql分页显示

    ### 经典的 PHP + MySQL 分页显示技术详解 在 Web 开发中,尤其是在构建具有大量数据展示功能的网站时,分页是一项非常重要的技术。它不仅能够提高用户体验,还能减轻服务器的压力。本文将深入探讨一种经典的 ...

    sql分页(sqlserver,mysql,oracle )

    总结而言,虽然SQL Server、MySQL和Oracle在实现分页的具体语法上有所不同,但核心思想都是先定位到起始行,然后根据每页显示的记录数来选取相应数据。理解这些不同数据库的分页机制,对于高效地管理大量数据至关...

Global site tag (gtag.js) - Google Analytics