广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >SQL实现分页查询方法总结
  • 556
分享到

SQL实现分页查询方法总结

2024-04-02 19:04:59 556人浏览 八月长安
摘要

开发过程中经常遇到分页的需求,今天在此总结一下吧。 简单说来方法有两种,一种在源上控制,一种在端上控制。源上控制把分页逻辑放在sql层;端上控制一次性获取所有数据,把分页逻辑放在UI

开发过程中经常遇到分页的需求,今天在此总结一下吧。

简单说来方法有两种,一种在源上控制,一种在端上控制。源上控制把分页逻辑放在sql层;端上控制一次性获取所有数据,把分页逻辑放在UI上(如GridView)。显然,端上控制开发难度低,适于小规模数据,但数据量增大时性能和io消耗无法接受;源上控制在性能和开发难度上较为平衡,适应大多数业务场景;除此之外,还可以根据客观情况(性能要求,源与端的资源占用等)在源和端之间加一层,应用特殊算法和技术进行处理。以下主要讨论源上,即SQL上的分页。

分页的问题其实就是在满足条件的一堆有序数据中截取当前所需要展示的那部分。实际上各种数据库都考虑到分页问题而内置了一些策略,比如Mysql的LIMIT,oracle的ROWNUM和ROW_NUMBER(),SqlServer的TOP和ROW_NUMBER(),基于此我们可以得到一系列分页的方法。

1、 基于mysql的LIMIT和Oracle的ROWNUM,可以直接限制返回区间(以MySql为例,注意使用Oracle的ROWNUM时要应用子查询):

方法一、直接限制返回区间

SELECT * FROM table WHERE 查询条件 ORDER BY 排序条件 LIMIT ((页码-1)*页大小),页大小;

优点:写法简单。

缺点:当页码和页大小过大时,性能明显下降。

适用:数据量不大。

2、基于LIMIT(MySql)、ROWNUM(Oracle)和TOP(SqlServer),他们可以限制返回的行数,因此可以得到以下两套通用的方法(以SqlServer为例):

方法二、NOT IN

SELECT TOP 页大小 * FROM table WHERE 主键 NOT IN
(
    SELECT TOP (页码-1)*页大小 主键 FROM table WHERE 查询条件 ORDER BY 排序条件
)
ORDER BY 排序条件

优点:通用性强。

缺点:当数据量较大时向后翻页,NOT IN中的数据过大会影响性能。

适用:数据量不大。

方法三、MAX

SELECT TOP 页大小 * FROM table WHERE 查询条件 AND id >
(
    SELECT ISNULL(MAX(id),0) FROM 
    (
        SELECT TOP ((页码-1)*页大小) id FROM table WHERE 查询条件 ORDER BY id 
    ) AS tempTable
) 
ORDER BY id

优点:速度快,特别是当id为主键时。

缺点:适用面窄,要求排序条件单一且可比较。

适用:简单排序(特殊情况也可尝试转换成类似可比较值处理)。

3、基于SqlServer和Oracle的ROW_NUMBER(),可以得到返回数据的行号,基于此在限制返回区间得到如下方法(以SqlServer为例):

方法四、ROW_NUMBER()

SELECT TOP 页大小 * FROM 
(
    SELECT TOP (页码*页大小) ROW_NUMBER() OVER (ORDER BY 排序条件) AS RowNum, * FROM table WHERE 查询条件
) AS tempTable
WHERE RowNum BETWEEN (页码-1)*页大小+1 AND 页码*页大小
ORDER BY RowNum

优点:在数据量较大时相比NOT IN有优势。

缺点:小数据量时不如NOT IN。

适用:大部分分页查询需求。

到此这篇关于SQL实现分页查询方法总结的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: SQL实现分页查询方法总结

本文链接: https://www.lsjlt.com/news/160332.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SQL实现分页查询方法总结
    开发过程中经常遇到分页的需求,今天在此总结一下吧。 简单说来方法有两种,一种在源上控制,一种在端上控制。源上控制把分页逻辑放在SQL层;端上控制一次性获取所有数据,把分页逻辑放在UI...
    99+
    2022-11-12
  • MyBatis-Plus实现2种分页方法(QueryWrapper查询分页和SQL查询分页)
    目录 1 MyBatisPlusConfig2 UserPagination3 Mapper3.1 UserMapper.java3.2 UserMap...
    99+
    2022-11-12
  • mybatis 动态SQL查询方法总结
    这篇文章主要讲解了“mybatis 动态SQL查询方法总结”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mybatis 动态SQL查询方法总结”吧!背景××项目需要提供系统部分函数第三方调用...
    99+
    2023-06-20
  • SQL实现分页查询的方法是什么
    SQL实现分页查询的方法主要有两种:1. 使用LIMIT和OFFSET关键字:```sqlSELECT * FROM tab...
    99+
    2023-08-15
    SQL
  • SQL Server模糊查询的常见方法总结
    在数据查询的时候,有完整查询和模糊查询之分.在Access和SQL Server中使用模糊查询有一下几种查询: 1.用_通配符查询 "_"号表示任意单个字符,该字符号只能匹配一个字符...
    99+
    2022-11-11
  • redis实现分页查询的方法
    这期内容当中小编将会给大家带来有关redis实现分页查询的方法,以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。基于SortedSet的分页查询缓存方案首先想到的解决方法是使用@see L...
    99+
    2022-10-18
  • MySQL实现分页查询的方法
    这篇文章主要介绍MySQL实现分页查询的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!MySQL中实现分页查询:在数据量较小的情况下可使用limit查询来实现分页查询,在数据量大...
    99+
    2022-10-18
  • SQL查询语法知识梳理总结
    目录基本查询条件查询常用的条件表达式投影查询排序分页查询聚合查询分组多表查询连接查询小结基本查询 SELECT * FROM <表名> selec ...
    99+
    2022-11-12
  • sql中怎么实现分页查询
    本篇文章为大家展示了sql中怎么实现分页查询,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1.创建测试环境,(插入100万条数据大概耗时5分钟)。create&nb...
    99+
    2022-10-18
  • php查询类的方法总结
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑 在php中,可以使用get_class_methods()函数来查询类里面有哪些方法。 get_class_...
    99+
    2022-11-12
  • sql跨表查询的三种方案总结
    目录前言方案一:连接多个库,同步执行查询优点缺点代码执行方案二:在主数据库增加冗余表,通过定时更新,造成同库联表查询优点缺点相似实现场景方案三:dbLink本地连接多个库,在本地进行数据分析优点缺点前言 最近又个朋友问我...
    99+
    2022-08-11
    sql跨表查询方案 sql跨表查询
  • Sqlserver的SQL语句实现分页查询
    在应用程序的开发中,如果数据库中的数据量过于的庞大,则需要针对查询数据做分页处理,取出对应分页中的数据,在Sqlserver分页的语句写法中,有两种比较常用,一种是数据表中含有自增量Id的情况,可以根据Id...
    99+
    2022-10-18
  • mybatis-plus分页查询三种方法小结
    目录一、前期准备表二、使用selectPage三、使用2种分页查询的写法1、xml2、Mapper3、第一种写法4、第一种结果5、第二种写法6、第二种结果四、使用PageH...
    99+
    2023-05-20
    mybatis-plus 分页查询 mybatis 分页查询
  • 【Pandas总结】第五节 Pandas 数据查询方法总结_df.loc()总结
    文章目录 一、写在前面二、查询方法:`df.loc()`2.1 查询单个值2.2 查询列表对应的值2.3 查询区间内的结果2.4 条件查询2.5 按照函数要求查询 三、写在最后 ...
    99+
    2023-09-26
    pandas python 数据分析
  • SpringBoot分页查询功能的实现方法
    目录前言:首先是手动实现分页查询:接下来是关联前端分页和后台数据:总结前言: 学习了SpringBoot分页查询的两种写法,一种是手动实现,另一种是使用框架实现。现在我将具体的实现流...
    99+
    2022-11-13
  • mysql实现分页查询功能的方法
    小编给大家分享一下mysql实现分页查询功能的方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!mysql分页查询的方法:1、用具体字段代替【*】;2、先查寻索引;3、使用【between …...
    99+
    2022-10-18
  • Java分页查询的几种实现方法
    最近在做需求的过程中遇到几个需要分页查询的需求,我也对分页有了较深的了解。分页一般分为两种一种是直接在sql中分页,一种是在内存中分页。本文仅针对内存中分页做记录。 第一种    如果是一个查询接口,向接口中传入page,和size(p...
    99+
    2023-09-01
    java 数据库 mysql
  • Mysql查询优化的一些实用方法总结
    目录1. count的优化2. 避免使用不兼容的数据类型。3. 索引字段上进行运算会使索引失效。4. 避免使用!=或<>、IS NULL或IS NOT NULL、IN ,NOT IN...
    99+
    2022-11-13
  • MybatisPlus实现分页查询和动态SQL查询的示例代码
    目录一、描述二、实现方式三、 总结一、描述 实现下图中的功能,分析一下该功能,既有分页查询又有根据计划状态、开始时间、公司名称进行动态查询。 二、实现方式 Controller层...
    99+
    2022-11-12
  • Oracle中查询表结构的6种方法总结
    目录方法一:方法二:方法三:方法四:方法五:方法六:总结 方法一: 在【命令窗口】下输入,语法:desc 表名 DESC DUAL; --或 DESCRIBE TB_STUDENT; 注:可以使用PLSQL D...
    99+
    2023-04-12
    oracle查询表结构 oracle 表结构 oracle显示表结构语句
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作