SQLserver分页 高效率

SQLSERVER高效率分页存储 SQLSERVER高效率分页存储过程,数据量在2千万下查询分页只需要1-2秒,优化良好.... 立即下载
SQL Server 存储过程的分页,这个问题已经讨论过几年了,很多朋友在问我,所以在此发表一下我的观点

建立表:

CREATE TABLE [TestTable] (
 [ID] [int] IDENTITY (1, 1) NOT NULL ,
 [FirstName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
 [LastName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
 [Country] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
 [Note] [nvarchar] (2000) COLLATE Chinese_PRC_CI_AS NULL 
) ON [PRIMARY]
GO

 

插入数据:(2万条,用更多的数据测试会明显一些)
SET IDENTITY_INSERT TestTable ON

declare @i int
set @i=1
while @i<=20000
begin
    insert into TestTable([id], FirstName, LastName, Country,Note) values(@i, 'FirstName_XXX','LastName_XXX','Country_XXX','Note_XXX')
    set @i=@i+1
end

SET IDENTITY_INSERT TestTable OFF

 

-------------------------------------

分页方案一:(利用Not In和SELECT TOP分页)
语句形式:
SELECT TOP 10 *
FROM TestTable
WHERE (ID NOT IN
          (SELECT TOP 20 id
         FROM TestTable
         ORDER BY id))
ORDER BY ID


SELECT TOP 页大小 *
FROM TestTable
WHERE (ID NOT IN
          (SELECT TOP 页大小*页数 id
         FROM 表
         ORDER BY id))
ORDER BY ID

-------------------------------------

分页方案二:(利用ID大于多少和SELECT TOP分页)
语句形式:
SELECT TOP 10 *
FROM TestTable
WHERE (ID >
          (SELECT MAX(id)
         FROM (SELECT TOP 20 id
                 FROM TestTable
                 ORDER BY id) AS T))
ORDER BY ID


SELECT TOP 页大小 *
FROM TestTable
WHERE (ID >
          (SELECT MAX(id)
         FROM (SELECT TOP 页大小*页数 id
                 FROM 表
                 ORDER BY id) AS T))
ORDER BY ID


-------------------------------------

分页方案三:(利用SQL的游标存储过程分页)
create  procedure XiaoZhengGe
@sqlstr nvarchar(4000), --查询字符串
@currentpage int, --第N页
@pagesize int --每页行数
as
set nocount on
declare @P1 int, --P1是游标的id
 @rowcount int
exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
select ceiling(1.0*@rowcount/@pagesize) as 总页数--,@rowcount as 总行数,@currentpage as 当前页 
set @currentpage=(@currentpage-1)*@pagesize+1
exec sp_cursorfetch @P1,16,@currentpage,@pagesize 
exec sp_cursorclose @P1
set nocount off

其它的方案:如果没有主键,可以用临时表,也可以用方案三做,但是效率会低。
建议优化的时候,加上主键和索引,查询效率会提高。

通过SQL 查询分析器,显示比较:我的结论是:
分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句
分页方案一:(利用Not In和SELECT TOP分页)   效率次之,需要拼接SQL语句
分页方案三:(利用SQL的游标存储过程分页)    效率最差,但是最为通用

在实际情况中,要具体分析。 

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

相关推荐

[TI板]MSPM0G3507——keil环境配置+烧录配置+vscode配置+空工程迁移+点灯+芯片解锁教程

本文介绍了MSPM0G3507开发环境的配置与烧录方法。主要内容包括:1)下载安装芯片支持包和SDK开发工具;2)通过串口或DAPLink两种方式实现程序烧录,详细说明了UniFlash软件的使用步骤和常见问题解决方法;3)简要提及工程迁移和LED点灯等基础操作。文章提供了完整的开发环境搭建指南,涵盖从软件安装到实际烧录的全过程,并附有相关工具下载链接和操作截图,帮助开发者快速上手MSPM0G3507开发。

qq_23220445的博客 1万+

SQL Server三种高效率分页方法

1.如果有一个自动增长的id字段,则:   定义二个变量:Page,PageCount   Select top PageCount * From [tb_code] Where id>=(select min(id) from (select top (Page-1)*PageCount+1 id from [tb_code] order by id desc) as t) orde

anihasiyou的专栏 2754

深入解析USB3.0一致性测试的关键技术与实践指南

本文深入解析了USB3.0一致性测试的核心技术与实践指南。文章阐述了测试如何确保设备在5Gbps高速传输下的信号完整性、电源管理合规性及协议兼容性,并提供了从测试系统搭建到完整流程执行的实战经验,帮助工程师有效应对高速信号、电源与兼容性三大核心挑战。

weixin_29164091的博客 282

sqlserver和mysql分页效率_真正高效的SQLSERVER分页查询

Sqlserver数据库分页查询一直是Sqlserver的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID、YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询每页30条,查询第1500页(即第45001-45030条数据),字段ID聚集索引,YEAR无索引,Sqlserver版本:2008R2第一种方案、最简单、普通的方法:SELECT TOP 30 * ...

weixin_39953618的博客 386

GB28181 2022 配置信令

基本参数视频参数选项视频参数属性配置巡航轨迹

ww506772362的专栏 1631

软考「系统规划与管理师(第2版)」通关全攻略(2026年下半年)

它考的是一个IT管理者能不能用体系化的语言,把"我们为什么要建这个系统→怎么规划→怎么管好服务→怎么合规"讲圆。所以备考的核心策略也很明确——教材建框架 → 真题磨考点 → 案例练结构 → 论文备好真实项目素材 → 机考练打字。按计划走,不贪全、不盲刷、不死背,稳稳把三科都推过45分那条线。祝你通关 🎯。

软件行业技术文化交流。 3046

SQL Server分页大全及效率分析

<br />1.分页方案一:(利用Not In和SELECT TOP分页) <br /><br /><br />语句形式:<br />SELECT TOP 10 *<br />FROM TestTable<br />WHERE (ID NOT IN<br />(SELECT TOP 20 id<br />FROM TestTable<br />ORDER BY id))<br />ORDER BY ID<br /><br /><br />SELECT TOP 页大小 *<br />FROM TestTabl

灵雨飘零的专栏 1352

爬取B站评论+AI情感分析:Python批量抓数据+BERT正负向分类(全流程)

B站作为年轻群体聚集的内容平台,评论区蕴含海量用户真实态度(如好评、吐槽、中立观点),是情感分析的优质数据源!本文分享完整流程:批量爬取B站视频评论→数据清洗去噪→BERT模型情感分类→可视化分析,基于预训练BERT模型实现高精度正负向判断,新手也能快速复刻情感分析系统! 前置配置(关键!获取B站API访问权限) B站评论通过官方API接口返回,无需复杂解析,只需配置用户Cookie即可正常请求: 2. 完整代码(直接复制运行) 三、使用步骤(5步搞定,新手友好) 步骤1:配置关键参数 打开,在类中修改

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1068

SQL调优学习之——sqlserver分页从低效到高效

 首先感谢网友@aixuexi 在评论中的提醒,原博文介绍的几种都不是最高效,现已修改加入另一种更高效的方法。   以前都是使用mysql和oracle,对sqlserver的使用不多。最近因项目原因,要读取其他项目的数据库,取出某个门的开关历史记录,而对方使用的是sqlserver,所以研究起了sqlserver的分页,经过几次实践,慢慢的从低效的分页写到了高效的分页。   表结构 histor...

weixin_34092370的博客 174

MAC(m1)-VMWare Fusion安装CentOS7.9

MAC(m1)-VMWare Fusion安装CentOS7.9

兴趣是最好的老师 1768

基于STM32+华为云IOT设计的云平台监控系统_102

本次设计结合现代生活的具体需求,设计出一套基于华为云IOT设计的云平台监控系统,可以远程实时查看家里光照强度、温湿度等信息,支持在云端控制家里的电器设备,实现远程控制。

7644

SqlServer两种分页以及效率对比

SqlServer两种分页以及效率对比 昨天不知道用了多长时间在WebApi.dbo.MyTest这个表里导入了500W条数据,今天分别用两种分页方式对其效率进行了测试,下面是第一种分页方式。 1.分页代码DECLARE @PageNumber INT,@PageSize INT SET @PageNumber=12600 SET @PageSize=100 SELECT * FROM

以梦为马 3574

K8S部署Java项目(Gitlab CI/CD自动化部署终极版)

每个人都有惰性,但不断学习是好好生活的根本,共勉!

感谢阅读 6954

sqlserver高效率分页实现

说明: (1)写分页程序的相关类的想法来源于好友(软件日志:qq呢称)。并由他提出了ms sqlserver下的分页sql的实现,个人感觉不错,故产生了完成相关通用类的念头 (2)ms sqlserver下的分页sql原理:通过正序与反序记录集之差获得所需页的记录集。 设有表:CREATE TABLE[pageDemo] (         [id] [int] NOT NULL ,

流浪者的专栏 1559

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

oracle高效率分页sql,SQLSERVER ORACLE MYSQL高效率分页查询

SQLSERVER ORACLE MYSQL高效分页查询SQLSERVER ORACLE MYSQL高效分页查询如果查询结果需要分页,从效率上讲,下面的效率应该比较高(粉红色表示需要根据实际情况填充的地方)三类数据库中进行分页查询的高效率方法(目前来看):Oracle: SELECT * FROM (SELECT MY_TABLE.*,ROWNUM AS MY_ROWNUM FROM (/**...

weixin_35097989的博客 231

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

sqlserver和mysql分页效率_sqlserver高效率分页实现

说明:(1)写分页程序的相关类的想法来源于好友(软件日志:qq呢称)。并由他提出了ms sqlserver下的分页sql的实现,个人感觉不错,故产生了完成相关通用类的念头(2)ms sqlserver下的分页sql原理:通过正序与反序记录集之差获得所需页的记录集。设有表:CREATE TABLE[pageDemo] ([id] [int] NOT NULL ,[name] [nvarchar] (...

weixin_39553705的博客 232

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

SQLServer大量数据高效率分页

以下为从大数据量表检索分页数据的有效方法 测试时,先从LargeTable表选出1000条记录分页呈现 --TIME_SEGMENT为数据表字段 declare @pagesize int--每页大小 declare @currentpage int--当前页 set @pagesize=10 set @currentpage=1 SELECT TOP (@pagesize) * FR

idays021的专栏 7226

高效率的Access\MSSQL分页的SQL语句

采用Access数据库有许多优点,比如数据库无须专门的数据库空间,使用,备份,迁移也非常方便。 但一旦数据量到达上万条,上十万条甚至更多的时候,ACCESS的大数据量的列表分页效率问题就出现了。 用普通的Recordset方法来分页会非常非常慢。 所以从SQL语句底层,找到高效率的分页方法才能优化效率,提高速度。 本文不再讨论用Adodb.Recordset,和SQL语句里的NOT IN或

健忘BLOG 3417

sql 分页,ROW_NUMBER高效率分页(仅支持MSSQL2005及以上)

sql 分页,ROW_NUMBER高效率分页(仅支持MSSQL2005及以上) SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY sort_id asc,add_time desc,id desc) as row_number, * FROM dt_channel_article_news where id>0) AS T WHERE row_number between 1 and 10 ...

橙-极纪元-JJYCheng 579

一个高效率的SQL Server分页语句

今天在使用AspNetPager组件对新闻列表分页时发现该需要通过一个API将当前页开始的一页记录取出来,以前在MYSQL中是很容易的,通过limit关键字限定一下取出来记录的起始位置就可以了。但是现在换到SQL Server了不太好写,我只知道SQL Server里面有一个to

Ben的专栏 953
上一篇: 新浪微博SDK使用指南
下一篇: 《Objective-C 程序设计(第4版)》读后感
meng0911
博客等级 码龄15年 15粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值