几种数据库分页查询的实现与比较

Java MyBatis 分页查询的实现方法 在实际的软件开发项目中,当处理大量数据时,一次性将所有数据加载到前端显示不仅会影响系统性能,还会给用户带来糟糕的体验。分页查询能够将大量数据分成若干页,每次只查询和显示一部分数据,从而提高系统的响应速度和用户体验。本文的目的就是详细介绍在 Java 开发中使用 MyBatis 实现分页查询的各种方法,范围涵盖从基础概念到实际项目应用的各个方面。本文将按照以下结构进行阐述:首先介绍核心概念,包括分页查询的原理和相关架构;接着讲解核心算法原理,并通过 Python 代码进行详细说明; 阅读详情

来源: http://blog.youkuaiyun.com/smartkernel/archive/2008/02/22/2112917.aspx

几种分页查询的实现与比较:个人比较推荐第5种方式,性能比较稳定,语法结构简单

    --【00】初始化数据(执行几分钟就可以产生几百万数据)Person表结构:ID(int 自增列),Name(nvarchar(50)),Age(int)
    WHILE 1 = 1
    BEGIN
     INSERT INTO dbo.Person (Name,Age) VALUES (NEWID(),Round(Rand()*100,1))
    END

    SELECT * FROM dbo.Person

    --【01】200万数据情况下,测试时用了7秒:临时表的方法
    DECLARE @StartRow INT
    DECLARE @EndRow INT
    SET @StartRow = 100
    SET @EndRow = 110
    SET ROWCOUNT 0
    DECLARE @TempTable TABLE
    (
        ID int IDENTITY PRIMARY KEY,
        PK int
    )

    INSERT INTO @TempTable SELECT ID FROM dbo.Person ORDER BY Name

    SELECT A.* FROM Person AS A JOIN @TempTable AS B ON A.ID = B.PK WHERE B.ID >= @StartRow AND B.ID < @EndRow

    --【02】200万数据情况下,测试时用了4秒:影响行数方法
    DECLARE @StartRow INT
    DECLARE @PageSize INT
    SET @StartRow = 100
    SET @PageSize = 10

    DECLARE @Sort NVARCHAR(50)--与ORDER BY的列类型一致
    SET ROWCOUNT @StartRow

    SELECT @Sort = Name FROM Person ORDER BY Name
    SET ROWCOUNT @PageSize

    SELECT * FROM Person WHERE Name >= @Sort ORDER BY Name

    --【03】200万数据情况下,测试时用了0秒:子查询的方法
    DECLARE @StartRow INT
    DECLARE @PageSize INT
    SET ROWCOUNT 0
    --SET @StartRow = 100(TOP关键字不能使用变量)
    --SET @PageSize = 10(TOP关键字不能使用变量)
    SELECT * FROM Person WHERE ID IN
    (
     SELECT TOP 10 ID FROM Person WHERE ID NOT IN(SELECT TOP 100 ID FROM Person ORDER BY Name)
        ORDER BY Name
    )
    ORDER BY Name

    --【04】200万数据情况下,测试时用了5秒:游标的方法
    DECLARE @StartRow INT
    DECLARE @PageSize INT
    SET @StartRow = 100
    SET @PageSize = 10
    SET ROWCOUNT 0

    DECLARE @ID INT
    DECLARE @TempTable TABLE (ID INT NOT NULL PRIMARY KEY)

    DECLARE PagingCursor CURSOR DYNAMIC READ_ONLY FOR
    SELECT ID FROM Person ORDER BY Name

    OPEN PagingCursor

    FETCH RELATIVE @StartRow FROM PagingCursor INTO @ID

    WHILE @PageSize > 0 AND @@FETCH_STATUS = 0
    BEGIN
        INSERT INTO @TempTable(ID) VALUES(@ID)
        FETCH NEXT FROM PagingCursor INTO @ID
        SET @PageSize = @PageSize - 1
    END

    CLOSE PagingCursor
    DEALLOCATE PagingCursor

    SELECT A.* FROM Person AS A JOIN @TempTable AS B ON A.ID = B.ID ORDER BY Name

    --【05】200万数据情况下,测试时用了1秒:行号函数的方法(只有SQL Server 2005以上版本支持)
    DECLARE @StartRow INT
    DECLARE @PageSize INT
    SET ROWCOUNT 0
    SET @StartRow = 100
    SET @PageSize = 10

 SELECT * FROM
 (
  SELECT ROW_NUMBER() OVER (ORDER BY Name) AS RowNumber,* FROM Person
 ) AS A WHERE A.RowNumber BETWEEN @StartRow + 1 AND @StartRow + @PageSize

综上所述,Sql Server 2005 的 ROW_NUMBER() 行号函数实现了类似 mysql limit 的分页提取办法

性能得到大幅提升,想不清楚微软件怎么在 Sql server 2000的时候不做这个?

几种数据库分页查询的区别 Oracle、MYSQL、sqlserver和DB2分页查询 分页查询 立即下载

相关推荐

真正高效的SQLSERVER分页查询(多种方案)

Sqlserver数据库分页查询一直是Sqlserver的短板,分页查询每页30条,查询第1500页(即第45001-45030条数据)进行测试,分析出最高效的查询,感兴趣的朋友可以参考下哈

几种分页查询的实现与比较

原贴地址:http://blog.youkuaiyun.com/smartkernel/archive/2008/02/22/2112917.aspxwww.SmartKernel.com几种分页查询的实现与比较:个人比较推荐第5种方式,性能比较稳定,语法结构简单    --【00】初始化数据(执行几分钟就可以产生几百万数据)Person表结构:ID(int 自增列),Name(nvarchar(

冯立彬的博客 6551

西门子触摸屏教程wincc flexible2008 sp5 Smart V3 V4中文版软件

西门子触摸屏教程wincc flexible2008 sp5 Smart V3 V4中文版软件

liang007dudu的博客 1万+

利用Redis List实现数据库分页快速查询的有效方法

利用Redis的List数据结构来实现数据库分页查询是一种有效的方法,可以提高查询性能和响应速度。通过将数据加载到Redis中,并利用LRANGE命令来执行分页查询,我们可以避免传统数据库分页查询中的性能问题。综上所述,利用Redis实现分页查询是一种简单而有效的方式,可以提高Web应用程序的性能和用户体验。为了解决这个问题,我们可以利用Redis的List数据结构来优化分页查询,提高查询性能和响应速度。这样,对于相同的查询,我们可以直接从缓存中获取数据,而不需要再次执行查询操作。

qq_52645134的博客 1995

从AI画稿到3D虚拟时装:Illustrator与Substance 3D的服装设计工作流

本文旨在解决传统服装与纺织品设计师在产品开发流程中,面临的“2D印花图案无法直观预见3D上身效果”、“物理打样成本高昂且周期漫长”的核心痛点。我们将介绍一套纯数字化的3D可视化工作流,核心是利用 Adobe Illustrator 进行矢量印花图案创作,通过 Adobe Substance 3D Sampler 将其转化为逼真的PBR(基于物理渲染)布料材质,并最终在 Adobe Substance 3D Stager 中,将该材质应用于3D服装模型,渲染出照片级的虚拟样衣。本指南将帮助设计师以极低的成本和

Kingsdesigner的博客 1398

AI训练加速30%!用numactl玩转多显卡绑核的隐藏技巧

本文深入探讨了如何利用Linux系统的numactl工具,通过精确的NUMA绑核策略优化多GPU AI训练性能。文章详细解析了NUMA架构对性能的影响,提供了从拓扑探查、命令实战到多卡脚本化部署的完整指南,并分享了性能验证与常见陷阱,帮助开发者实现高达30%的训练加速。

web99的专栏 449

分页查询VS查询后分页

分页查询适用于数据量大且需要高效查询和传输的场景,而查询后分页适用于数据量较小且实现逻辑简单的场景。根据具体需求和数据量选择合适的方法,可以在性能和实现复杂度之间找到平衡。如果你需要在大数据量的场景中进行高效的分页查询,建议采用分页查询的方式。

weixin_45594172的博客 709

PID算法(位置式pid算法和增量式pid算法)

PID 算法是闭环控制系统中常用的算法,PID 分别是 Proportion(比例)、Integral(积分)、Differential(微分)的首字母缩写。它是一种结合比例、积分和微分三个环节于一体的闭环控。

m0_57678852的博客 2万+

普通查询、排序与分页查询、分组查询、子查询(内查询)、连接之 LEFT JOIN、RIGHT JION、INNER JOIN

题目:若employees表中employee_id与job_history表中employee_id相同的数目不小于2,输出这些相同id的员工的employee_id,last_name和其job_id。题目:查询与141号或174号员工的 manager_id 和 department_id 相同的其他员工的employee_id, manager_id,department_id。题目:查询公司管理者的employee_id,last_name,job_id,department_id信息。

weixin_43809550的博客 1611

如何使用 SAP ABAP Development Tool 连接 SAP BTP 上的免费 ABAP 编程环境

在云端环境编写 ABAP 代码会遇到一些限制,比如你无法在云端 ABAP 编程环境进行发生在传统 SAPGUI 里的 Dynpro 和 Screen 编程。部分在 SAPGUI 里使用的 List 处理相关的关键字比如 WRITE,还有 CALL TRANSACTION 等代码,也无法在云端使用。 当然如果大家觉得上面提到的这些限制不会影响自己的 ABAP 学习,就可以继续本文的阅读,使用 ABAP Development Tool 登录云端的 ABAP 编程环境。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1519

PyTorch视觉项目实战:从数据加载到模型部署

PyTorch视觉项目实战:从数据加载到模型部署 ,人工智能,计算机视觉,大模型,AI,随着深度学习在计算机视觉领域的飞速发展,PyTorch 凭借其简洁的代码风格、动态计算图特性以及强大的社区支持,成为众多开发者和研究人员的首选框架。从数据加载、模型构建与训练,到最终的模型部署,PyTorch 提供了一套完整且灵活的解决方案。本文将通过实际项目案例,详细阐述基于 PyTorch 的视觉项目全流程,结合丰富的代码示例和概念解析,帮助读者掌握从项目起步到落地的关键技术。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 4万+

数据库系统(三):普通查询、分页查询、分组查询、条件查询

①最基本的查询语句由select和from关键字组成t_emp;②若select子句中使用了表达式,那么列名就默认为表达式,需要对列名重命名例:select empno,sal*12from t_emp;

weixin_54792441的博客 458

【YOLOv8改进[Conv]】使用OREPA助力V8更优秀

使用OREPA助力V8更优秀,降低训练成本,在不引入任何推理时间成本的情况下提高深度模型的性能。

静谧、淡雅 1918

Java分页查询的几种实现方法

Java实现分页查询的两种方式

Oliver_Liuqifan的博客 1万+

AutoJs调用DeepSeek大模型接口实战教程 AutoJs接入DeepSeek、 DeepSeek API调用 、 手机脚本接入大模型

通过这篇文章,我们用 AutoJs 成功接入了 DeepSeek Chat API。使用发送请求在 Header 里正确携带 API Key从里拿到最终返回结果这样一来,你就可以在 AutoJs 里实现一个智能助手脚本,甚至做更复杂的 AI 自动化工具。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 472

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

query对mysql分页查询_数据库分页查询的几种实现思路

当系统中的数据超出一定数量时,给展示端展示列表性的数据时,一般不会把所有的数据一次性全部显示到展示端,体验良好的交互设计一般是一次只展示一部分数据,通过上下翻页或指定页码的方式查看其它页的数据,就像翻书一样。另一方面当数据量大时,服务器的资源也限制了一次查所有数据,如果一次查询的数据量过多,数据库和应用服务器的内存都有可能被撑爆。单库分页查询主流的数据库的sql语法都支持分页,比如mysql的of...

weixin_39958100的博客 828

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

几种常用数据库分页查询

MySQL 1、Mysql的limit用法 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能。 SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字...

一只没有脚的鸟 2346

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

常用的几种 SQLServer 分页查询方式实现

常用的几种 SQLServer 分页查询方式实现 SQLServer 的数据分页:假设现在有这样的一张表:CREATE TABLE test(id int primary key not null identity,names varchar(20))然后向里面...

aizhejuan4396的博客 113

Mysql 分页查询优化的几种思路

当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使用分页查询。 对于数据库分页查询,也有很多种方法和优化的点。下面简单说一下我知道的一些方法。 准备工作 为了对下面列举的一些优化进行测试,下面针对已有的一张表进行说明。 表名:order_history 描述:某个业务的订单历史表 主要字段:unsigned int id,...

只有变秃 才能变强 1682

分页查询的几种不同方式

分页查询的几种方式

weixin_44540161的博客 2058

SQL分页查询方案的性能对比

作者 | 中国农业银行 吴海存责编 | 晋兆雨头图 |优快云下载自视觉中国导读本文主要介绍了基于ROWNUM、主键列/非空唯一性列、分析函数、OFFSET-FETCH NEXT机制的...

优快云云计算 7308

MyBatis中动态SQL&&以及分页查询的几种方式详解

MyBatis支持动态SQL,即根据不同的情况生成不同的SQL语句。2.Where语句:可以使用where语句根据不同的条件拼接不同的SQL语句。在进行分页查询时,应用程序首先计算出 offset 和 limit 的值,然后将它们传递给 MyBatis 执行相应的 SQL 语句。基于应用程序的分页是在查询结果集合中进行分页的。综上所述,基于数据库的分页和基于应用程序的分页各有优缺点,具体使用哪种方式应根据实际情况进行选择。标签用于将一个定义好的SQL片段包含在另一个SQL语句中,以实现SQL语句的复用。

m0_58490785的博客 1939

分库分表后如何进行分页查询

在我们做了分库分表之后,数据会散落在不同的数据库中,这时候跨多个库的分页查询、以及排序等都非常的麻烦。如果分的库不多,那么我们还可以通过扫表的方式把多个库中的数据都取出来,然后在内存中进行分页和排序。比如我要查询limit 100,100 的话,有三个库,那我就分别到这三个库中把0 - 200之间的数据都取回来,然后再在内存中给他们排序,之后,再取出第100-200之间的数据。这种做法非常的麻烦,而且随着偏移量越大,当要分的页很多的时候,可想而知这种方法根本就不靠谱。

m0_68723562的博客 1863

Mybatisplus多表关联分页查询有多种实现方式

这是最常用的方式,通过自定义 SQL 查询可以实现较复杂的关联查询,结合 MyBatis-Plus 的IPage接口,可以实现分页效果。User和Order,我们想查询用户及其对应的订单列表。@Data@Data在UserMapper@DataUserMapper实现方式优点适用场景XML 自定义 SQL灵活性高,可实现复杂的关联查询复杂 SQL 关联查询Wrapper 自定义 SQL灵活性高,支持简单关联查询简单的多表关联查询使用 DTO 与自定义 SQL。

weixin_44102162的博客 4725

MyBatis如何实现分页查询

MyBatis实现分页主要有三种方式:1. 使用RowBounds对象进行内存分页(适用于小数据量);2. 在SQL中直接编写LIMIT/OFFSET语句(如MySQL);3. 通过分页插件(如PageHelper)自动拦截SQL并添加分页逻辑。物理分页推荐使用插件或数据库方言实现,避免内存溢出风险。

weixin_46084191的博客 1028

SQL分页查询的几种方式

SQL分页查询的几种方式 需求:查询表dbo.Message,每页10条,查询第2页 1:TOP() SELECT TOP(20) * FROM dbo.Message WHERE Code NOT IN (SELECT TOP(10) Code FROM dbo.Message) 2:BETWEEN * AND * , Row_Number() OVER(ORDER BY...

singularity_muzi的博客 1370
上一篇: ASP.NET程序性能优化的七个方面
imbin
博客等级 码龄22年 6粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值