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

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

[官方培训]22-UE资产优化 Epic 肖月 笔记

Nanite+Lumen目标:面向TA,美术,不影响视觉的前提下,优化运行和编辑效率引擎:UE5.1延迟管线平台:主流PC,Windows 10 with DX12。

Tcohneyn的博客 1576

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

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

qq_52645134的博客 1995

分离与合体题解(区间DP)

题目: 经过在机房里数日的切磁,LYD从社神牛那里学会了分离与合体,出关前,杜神牛给了他一个测试 杜神牛造了个区域,它们紧邻着排成了一行,编号1-n。在这經个区域里都放着一把OI界 的金钥匙,每一把都有一定的价值,LYD当然想得到它们了。然而杜神牛规定LYD不可以一下子 把它们全部拿走,而是每次只可以拿一把。为了尽快地拿到所有的金钥匙,LYD自然就用上了刚学的分离与合体特技。 开始LYD可以选择从1~n-11~n-11~n-1的任何一个区域(记为K)进入,进入后LYD会在K区域发 生分离,从而分离为两个小L

cqbz_lipengcheng的博客 372

Midscene.js(2):代码集成 + 桥接模式(Bridge Mode)的使用「喂饭教程」

本文将手把手教你从零开始搭建一个 Node.js 项目,集成 Midscene.js,并利用其桥接模式实现对 Chrome 浏览器的自动化操作。我们将通过具体的实例,来展示 Midscene.js 的便捷性与 AI 能力的结合。

blues_C的博客 1845

分页查询VS查询后分页

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

weixin_45594172的博客 709

【乐企】开票控制服务

例子:企业信息初始化。

九七的博客 453

普通查询、排序与分页查询、分组查询、子查询(内查询)、连接之 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

群晖如何安装软路由OpenWrt/iStoreOS作为旁路由(含网络设置、设置密码、还原出厂设置等linux命令ipk包)

openwrt的固件。

XiaoqiangClub的博客 7018

数据仓库数据质量监控和处理方法最佳实践

指的是检查数据是否存在反常或者错误的情况,例如数值反常地过大或者过小,或者超过记录的波动值,对应的规则包括数值波动检查,最大值、最小值检查,跨表准确性等。指的是检查数据是否存在缺失的情况,这里的缺失可以是整个数据集的记录缺失,也可以是某个字段记录的缺失,对应的规则包括空值检查,表总行数检查。指的是检查数据是否符合规范,是否按照规定的格式存储,对应的规则包括正则表达式检查,字段长度检查,枚举集合检查,数值范围等。指的是检查哪些数据是重复数据或者数据的哪些属性是重复的,对应的规则例如主键唯一性检查。

大模型大数据攻城狮的专栏 899

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

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

weixin_54792441的博客 458

36. 在 SAP Integration Suite 里打通入站 HTTP:iFlow 端点鉴权、角色授权与多节点 403 排障实战

本文探讨了SAP Cloud Integration中HTTP入站连接的认证与授权机制。在Cloud Foundry环境下,认证(证明身份)和授权(权限控制)需分开处理:认证可采用Basic、OAuth或mTLS等方式,授权则通过角色实现。文章详细解析了两种主流配置路径:基于IdP用户的Basic认证(需配置Role Collection)和基于OAuth Client/Service Instance的系统调用(通过Service Key管理权限)。特别指出ABAP系统在多节点环境下可能因cookie编码

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

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

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

Oliver_Liuqifan的博客 1万+

BMS硬件设计核心:安全、精度与EMC的工程平衡

电池管理系统(BMS)是保障锂电安全运行的关键嵌入式子系统,其本质是在高精度模拟测量、实时故障响应与复杂电磁环境适应性之间达成工程平衡。原理上,BMS依赖专用监测芯片(如BQ76920)实现微秒级硬件保护,结合主控MCU(如STM32)完成策略决策与通信管理,形成‘安全协处理器+智能主控’双架构。技术价值体现在对过压/欠压/过流/温度等多维故障的毫秒级闭环处置能力,支撑SOC/SOH估算可信度与系统鲁棒性。典型应用场景涵盖电动工具、轻型电动车及储能模块等中低串数电池组。本文聚焦BMS控制板在时钟布局、电源滤

weixin_30591519的博客 70

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

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

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

weixin_39958100的博客 828

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

几种常用数据库分页查询

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

一只没有脚的鸟 2346

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

常用的几种 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、付费专栏及课程。

余额充值