SQL使用OFFSET/FETCH NEXT实现分页对比ROW_NUMBER,性能差异

SQL Server之游标的基础知识 打开优快云 APP Copyright © 1999-2020, youkuaiyun.com, All Rights Reserved 登录 SQL Server之游标的基础知识 转载 2018-01-13 萧曵 丶 码龄8年 什么是游标: 游标是可以在结果集中上下游动的指针。 游标的作用: –允许定位到结果集中的特定行。 –从结果集的当前位置检索一行或多行数据。 –支持对结果集中当前位置的行进... 阅读详情

第一步,创建表

  • CREATE TABLE Customers (  
  •     CustomerID INT,  
  •     CustomerNumber CHAR(4),  
  •     CustomerName VARCHAR(50),  
  •     CustomerCity VARCHAR(20) )  
  • GO  

第二步,编写语句

插入语句

/*使用CTE递归循环插入 运用CTE递归插入,速度较快*/  
TRUNCATE table Customers  
GO 
DBCC DROPCLEANBUFFERS  
DBCC FREEPROCCACHE  
  
SET STATISTICS IO ON;  
SET STATISTICS TIME ON;  
GO  
  
DECLARE @d Datetime  
SET @d=getdate();  
  
WITH Seq (num,CustomerNumber, CustomerName, CustomerCity) AS  
(SELECT 1,'0000','Customer 0',cast('X-City' as NVARCHAR(20))  
UNION ALL  
SELECT num + 1,'0000','Customer 0',  
cast(CHAR(65 + (num % 26)) + '-City' AS NVARCHAR(20))  
FROM Seq  
WHERE num <=   10000/*CTE批量递归500万数据量 用时一般大概3分钟 因个人电脑而已5000000*/
)  
INSERT INTO Customers (CustomerNumber, CustomerName, CustomerCity)  
SELECT CustomerNumber, CustomerName, CustomerCity  
FROM Seq  
OPTION (MAXRECURSION 0)  
  
select [500万数据量插入完毕,共花费时间(毫秒)]=datediff(ms,@d,getdate())  
  
SET STATISTICS IO OFF ;  
SET STATISTICS TIME OFF;  
GO

查询语句row_number

SET STATISTICS IO ON;
SET STATISTICS TIME ON;

SELECT * FROM
(
    SELECT ROW_NUMBER() OVER (ORDER BY customerid desc) AS 'RowNumber', * FROM Customers
) AS UserInfo
WHERE UserInfo.customerid BETWEEN 5001 AND 5020

SET STATISTICS IO OFF;
SET STATISTICS TIME OFF;

查询语句fetchnext

SET STATISTICS IO ON;
SET STATISTICS TIME ON;
select * from Customers order by customerid desc offset 5000 rows fetch next 20 rows only
SET STATISTICS IO OFF;
SET STATISTICS TIME OFF;

第三步,查询对比

1万条数据量查询对比

逻辑读取次数和执行时间fetchnext 获得一分

另外分别测试了读取开头100条,和末尾20条的情况。末尾20条查询亮着性能详尽,fetchnext还是相对快一点。

50万条数据量查询对比

逻辑读取次数和执行时间fetchnext 获得一分

另外分别测试了读取开头100条,和末尾20条的情况。末尾20条查询亮着性能详尽,fetchnext还是相对快一点。

500万条数据量查询对比

逻辑读取次数和执行时间fetchnext 获得一分,fetchnext 逻辑读取和执行时间性能是rownumber的一倍

1亿条数据量查询对比(final battle)  

再多不测了,哇咔咔。

下面是废话,哈哈哈,人生么,务实也要务虚。

500万数据插入用了3分钟。

5000万数据,推测30分钟。

1亿额,难道用1个小时么刚刚过去了三分钟,还在查询,那就让子弹再飞一会。

 

刚刚去看了看风景,思考了下人生。回来一看,额,还有个sql在执行,还没完,数据量确实有点大了。我还是暂停了语句吧

打算顺便测试下 count(1) 和(*)到底有啥区别,目前来看,500万以下的数据量查询效果一样,没啥区别

5千万条数据量查询对比(final battle)

吃完午饭眯会,继续码字,1亿条太多了,电脑卡死

 

逻辑读取次数和执行时间fetchnext 获得一分,此时已经是10倍的效率差距了

同时验证了下count(*)和count(1)的区别

 

对比结果

fetch性能高

简单数据下:count(1)和count(*)性能么有什么大的差别。推测,复杂数据表1比*性能高

 

SQL Server 3种分页查询对比:ROW_NUMBER vs OFFSET FETCH vs TOP 性能实测 本文深度对比了SQL Server中三种分页查询方法(ROW_NUMBER、OFFSET FETCH和TOP)的性能表现,基于百万级数据集的实测数据,分析了各方案的优缺点及适用场景。测试结果显示,TOP方法在大数据集分页中表现最优,性能稳定且不受页码影响,而OFFSET FETCH在中间页处理上优于传统ROW_NUMBER方案。文章还提供了索引设计、参数化查询等高级优化策略,帮助开发者提升Mssql分页查询效率。 阅读详情

相关推荐

SQL Server 分页查询性能对比:ROW_NUMBER vs OFFSET FETCH vs TOP 3方案实测

本文深入评测了SQL Server中三种分页查询方案(ROW_NUMBER、OFFSET FETCH和TOP)的性能差异,基于百万级数据实测数据,分析了各方案的底层原理、语法特点及适用场景。测试结果显示,OFFSET FETCH在小数据量分页中表现最优,而ROW_NUMBER在深层分页时更稳定。文章还提供了索引设计、参数化查询等优化策略,帮助开发者根据业务需求选择最佳分页方案。

weixin_31220401的博客 295

SQL Server 分页 OFFSET/FETCH NEXT、ROW_NUMBER()

方法1【offset/fetch next(SQL Server 2012及以上)

KingCruel的专栏 2477

MySQL、Oracle、SQL Server 和 PostgreSQL 的分页查询实现对比

在处理大量数据时,分页查询是一个非常重要的操作。不同的数据库系统提供了不同的实现方式,开发者应该根据具体的使用场景和性能要求选择合适的分页查询方案。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1365

SQL Server使用Offset/Fetch Next实现分页

首先,正常的查询是这样的 ![在这里插入图片描述](https://img-blog.csdni 使用分页后

南 墙 1万+

SQL Server分页查询全攻略:从OFFSET FETCH到Keyset性能优化

分页查询是数据库开发中的高频需求,不同数据库语法差异显著。SQL Server没有MySQL的LIMIT,其分页实现依赖版本特性。从基础概念出发,分页本质是排序后跳过N行取M行,SQL Server通过OFFSET FETCH、ROW_NUMBER、TOP嵌套等方案实现。理解其底层原理,有助于根据版本和场景选择合适方案,并规避深翻页性能陷阱。在实际工程中,正确设计ORDER BY和覆盖索引,可显著提升查询效率;针对大数据量滚动加载场景,Keyset分页能保持稳定性能。本文系统梳理了SQL Server分页查

weixin_33391446的博客 316

SQL Server分页优化实战:从ROW_NUMBER到键集分页

分页查询是数据库性能瓶颈的高发场景,其本质是排序、筛选与数据定位三者的协同问题。传统ROW_NUMBER()分页因强制全集排序和编号,导致CPU飙升、tempdb压力剧增及索引失效;而OFFSET-FETCH通过语义化跳过机制显著降低IO与内存开销,但大数据偏移仍受限于线性跳过成本。真正可持续的高性能分页依赖键集分页(游标分页)——以排序键值为锚点,结合覆盖索引与过滤索引,实现恒定复杂度的索引Seek。本文聚焦SQL Server环境,深入解析ROW_NUMBER()隐性代价、OFFSET-FETCH实测差

a6t2007的博客 356

SQL Cursor(游标) 基本用法[用两次FETCH NEXT FROM INTO语句?]

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 table1结构如下 id int name varchar(50) declare @id int declare @name varchar(50) declare cursor...

u011265702的博客 1万+

延迟相乘叠加求和 DMAS (Field II 仿真代码)

(Delay Multiply and Sum, DMAS)算法,最初是为雷达微波系统设计的,研究者们对 DMAS 波束合成方法进行了修改,并应用超声成像。结果表明,DMAS 波束合成在模拟和实验中的表现都优于传统的延时叠加(Delay and Sum, DAS),这种新方法带来的主要改进是对比度分辨率明显提高(即主瓣和侧瓣更窄),从而增加了动态范围,提高了 B 型超声图像质量。与传统 DAS 相似,DMAS 算法通过对来自超声换能器阵元的信号应用几何计算延迟来聚焦接收到的波束。

weixin_38452364的博客 3083

深入探索:使用FETCH NEXT高效驾驭结果集

通过游标的使用,我们可以高效地处理大量数据,同时保持对资源的精细管理。理解游标的工作原理和正确使用它们对于数据库开发者来说是一项宝贵的技能。它允许用户逐行地访问结果,而不是一次性将整个结果集加载到内存中,这对于处理大型结果集尤为重要。在数据库的世界中,数据检索是一项基础而关键的操作。对于复杂的查询和大量的数据,如何有效地遍历结果集成为了性能优化的重要一环。语句来获取结果集中的下一行,这是对数据库游标的操作,也是高效数据检索的精髓所在。语句的运用,希望能够帮助你在数据处理中游刃有余,高效地驾驭结果集。

2401_85761003的博客 878

【速通版!语义通信基础与前沿学习计划】

🧠语义通信基础与前沿学习计划

dally2的博客 1412

SQL Server2008详细安装步骤(超详细步骤)

https://pan.baidu.com/s/1yvolqfU-AbiuGrIzblA7pA 提取码:lzw81.下载好安装包后解压到除C盘以外的磁盘,避免系统卡顿2.使用管理员身份打开安装程序注意:使用管理员身份打开时,此时如果显示以下画面属于正常现象,下载安装即可。因为.net现在有很多软件都需要,包括SQLSERVER2008,它里面有visual studio都要有net,电脑系统没有的话安装一下好了。3.选择全新安装或向现有安装添加新功能4.点击确定5.出现以下画面之后,输入产品密钥即可(密钥在

m0_67402774的博客 4万+

SQL Server 2012使用OFFSET/FETCH NEXT分页及性能测试

最近在网上看到不少文章介绍使用SQL Server 2012的新特性:OFFSET/FETCH NEXT 实现分页。多数文章都是引用或者翻译的这一篇《SQL Server 2012 - Server side paging demo using OFFSET/FETCH NEXT》,原文地址。 邀月对此也做了性能测,《SQL Server 2012服务端使用OFFSET/FETCH N...

weixin_30840253的博客 777

学Simulink--基于多物理场耦合与系统集成的储能系统场景实例:压缩空气储能(CAES)系统的热力学建模与效率分析

本文提供了一个基于Simulink的压缩空气储能(CAES)系统热力学建模教程。通过多物理场耦合方法,详细演示了从系统架构设计到仿真测试的全过程,包括多级压缩机/膨胀机系统搭建、显热蓄热系统设计以及效率分析。文章重点强调了热管理对提升CAES效率的关键作用,并给出了68%电-电效率的优化案例。最后提出了变工况建模、不同蓄热介质对比等高级优化方向,为开发零碳大容量储能系统提供了实用工具和方法。

amy_mhd的博客 130

SQL Server 2012服务端使用OFFSET/FETCH NEXT实现分页

今天看到一篇文章:《SQL Server 2012 - Server side paging demo using OFFSET/FETCH NEXT》,原文地址: http://beyondrelational.com/modules/29/presentations/483/scripts/12983/sql-server-2012-server-side-paging-demo-using...

weixin_34383618的博客 164

YOLOv11安卓端部署终极指南:从训练到NCNN移植,30分钟搞定手机实时检测!

本文详细介绍了YOLOv11模型在安卓设备上的NCNN部署全流程。主要内容包括:1) 环境配置要求(Python3.8+、PyTorch、NCNN框架等);2) COCO2017数据集准备与配置;3) 模型训练建议(使用RTX3090,50-100个epoch);4) 模型导出转换步骤(ONNX格式转换、NCNN优化);5) 安卓端实现的关键优化(快速sigmoid实现、纯C++NMS等)。项目在安卓CPU模式下可实现20FPS的稳定检测,并提供了激活函数选择、模型量化等性能调优建议。通过参考多个开源项目,

FJN110的博客 1726

解决开着代理情况下pip或魔搭下载失败

最近由于经常配环境导致,老是要来回切clash关掉代理,非常的不方便如下面的,魔搭模型下载失败如下面的,pip换源后下载失败。

风吹落叶的博客 2949

SQL Server 2012提供的OFFSET/FETCH NEXT与Row_Number()对比测试

原文连接:http://www.cnblogs.com/downmoon/archive/2012/04/19/2456451.html 在《SQL Server 2012服务端使用OFFSET/FETCH NEXT实现分页》一文中,我引用了《SQL Server 2012 - Server side paging demo using OFFSET/FETCH NEXT》,原文地址: h...

weixin_30739595的博客 90

【AI智能体】基于Coze 制作高质量PPT实战操作详解

基于Coze 制作高质量PPT实战操作详解

congge 6099

sqlserver 分页_SQL server分页的四种方法(算很全面了)

  这篇博客讲的是SQL server的分页方法,用的SQL server 2012版本。下面都用pageIndex表示页数,pageSize表示一页包含的记录。并且下面涉及到具体例子的,设定查询第2页,每页含10条记录。  首先说一下SQL server的分页与MySQL的分页的不同,mysql的分页直接是用limit (pageIndex-1),pageSize就可以完成,但是SQL...

weixin_39997795的博客 5538

模型预测控制(MPC)解析(六):有约束的MPC简介

本文为阅读笔记,仅供学习交流使用!!! 先从一个例子开始,说明当原始设计的控制信号满足操作约束时,控制系统的性能会显著恶化。并且只要稍加修改,如果在控制器的实现中加入约束,则性能恶化的程度可以降低,从而产生约束控制的思想。 在学习有约束控制之前,先看一个控制系统在控制信号饱和和不饱和的情况下运行的例子。 例:无阻尼振荡器的数学模型如下: 采样周期为Δt=0.1\Delta{t}=0.1Δt=0.1,对应的离散时间状态空间模型为: 设计目标是:设计一个预测控制系统,使得系统输出跟踪单位阶跃响应越快越好。预

行者无疆的博客 6655

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Oracle分页sql

在Oracle数据库中,分页查询通常涉及到ROWNUM伪列,这是一个Oracle特有的关键字,用于返回结果集中行的编号。

hc976865965的博客 28

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

SQL 高效分页(百万条数据)OFFSET / FETCH 分页

第一种方法效率最高 SELECT TOP 页大小 * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNumber,* FROM table1 ) as A WHERE RowNumber > 页大小*(页数-1) 注解:首先利用Row_number()为table1表的每一行添加一个行号,给行号这一列取名'RowN

Fanbin168的专栏 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SQL server分页的四种方法(算很全面了)

目录 方法一:三重循环 思路 代码实现 查询出的结果及时间 方法二:利用max(主键) 代码实现 查询出的结果及时间 方法三:利用row_number关键字 SQL实现 查询出的结果及时间 第四种方法:offset /fetch next(2012版本及以上才有) 代码实现 结果及运行时间 封装的存储过程 总结   这篇博客讲的是SQL server的分页方法,用的SQL server 2012版本。下面都用pageIndex表示页数,pageSize表示一页包含的记录。

一个懒鬼的博客 1万+

SQL Server 分页查询 ROW_NUMBER () OFFSET...FETCH游标(Cursor) 数据插入

本文介绍了SQL Server中两种分页查询方法和两种数据插入方式。分页查询部分详细讲解了ROW_NUMBER()和OFFSET-FETCH两种语法,包括参数定义、核心语法和版本适用性对比。数据操作部分对比了游标(逐行处理)和INSERT INTO...SELECT(批量插入)两种方式,分析其语法结构、使用场景和效率差异。文章通过具体代码示例演示了每种方法的实现过程,并提供了关键语法解释和应用场景说明,帮助开发者根据实际需求选择最合适的数据库操作方法。

2603_96051737的博客 444

SQL Server 2012 OFFSET/FETCH NEXT分页示例

原文:http://beyondrelational.com/modules/29/presentations/483/scripts/12983/sql-server-2012-server-side-paging-demo-using-offsetfetch-next.aspx?utm_source=brnewsletter&utm_medium=email&utm_campaign=2012

沧海一叶点滴心得 1万+

【Sql Server】使用row_number over方式进行表分页,数据量达到五千多条记录后,查询变慢需要20多秒的解决方案

最近创建了一张表,用于保存名称相关信息。刚开始是没有加任何索引,数据不多时查询也没什么问题。等到了表有5千多条记录后,查询变得很慢,设置需要二十多秒。一起来看下这个博主是如何解决的?或者你们是否有更好的解决方案呢?也欢迎评论区留言。

2509_93957830的博客 750
上一篇: SqlServer中in和exists的区别效率问题
下一篇: netcore vue elementui自动代码生成器
vimanas
博客等级 码龄11年 25粉丝 18原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值