问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

SQL数据库分页原理

发布网友 发布时间:2022-04-07 18:51

我来回答

2个回答

懂视网 时间:2022-04-07 23:12

AdventureWorks2008

 

1、Top*Top

 1 -使用 Top*Top
 2 DECLARE @Start datetime,@end datetime;
 3 SET @Start=getdate();
 4 
 5 DECLARE @PageNumber INT, @PageSize INT, @Sql varchar(max);
 6 SET @PageNumber=5000;
 7 SET @Pt=10;
 8 SET @Sql=‘SELECT T2.* FROM (
 9  SELECT TOP 10 T1.* FROM 
10  (SELECT TOP ‘ + STR(@PageNumber*@PageSize) +‘ * FROM Production.TransactionHistoryArchive
11  ORDER BY ReferenceOrderID ASC) AS T1
12  ORDER BY ReferenceOrderID DESC) AS T2
13 ORDER BY ReferenceOrderID ASC‘;
14 EXEC (@sql);
15 
16 SET @end=getdate();
17 PRINT Datediff(millisecond,@Start,@end);

2、表变量

 1 --使用表变量
 2 DECLARE @Start datetime,@end datetime;
 3 SET @Start=getdate();
 4 DECLARE @PageNumber INT, @PageSize INT, @Sql varchar(max);
 5 SET @PageNumber=5000;
 6 SET @PageSize=10;
 7 
 8 DECLARE @local_variable table (RowNumber int identity(1,1),[TransactionID] [int],
 9 [ProductID] [int],
10 [ReferenceOrderID] [int],
11 [ReferenceOrderLineID] [int],
12 [TransactionDate] [datetime],
13 [TransactionType] [nchar](1),
14 [Quantity] [int],
15 [ActualCost] [money],
16 [ModifiedDate] [datetime]);
17 insert into @local_variable (TransactionID, ProductID, ReferenceOrderID, ReferenceOrderLineID, TransactionDate, TransactionType, Quantity, ActualCost, ModifiedDate) 
18 SELECT TOP 50000 TransactionID, ProductID, ReferenceOrderID, ReferenceOrderLineID, TransactionDate, TransactionType, Quantity, ActualCost, ModifiedDate from Production.TransactionHistoryArchive ORDER BY ReferenceOrderID ASC
19 select * from @local_variable where RowNumber > (@PageNumber-1)*@PageSize and RowNumber <= @PageNumber*@PageSize
20 
21 SET @end=getdate();
22 PRINT Datediff(millisecond,@Start,@end);

3、临时表

--使用临时表
DECLARE @Start datetime,@end datetime;
SET @Start=getdate();
DECLARE @PageNumber INT, @PageSize INT, @Sql varchar(max);
SET @PageNumber=5000;
SET @PageSize=10;

create table #local_variable(RowNumber int identity(1,1),[TransactionID] [int],
 [ProductID] [int],
 [ReferenceOrderID] [int],
 [ReferenceOrderLineID] [int],
 [TransactionDate] [datetime],
 [TransactionType] [nchar](1),
 [Quantity] [int],
 [ActualCost] [money],
 [ModifiedDate] [datetime]);
insert into #local_variable (TransactionID, ProductID, ReferenceOrderID, ReferenceOrderLineID, TransactionDate, TransactionType, Quantity, ActualCost, ModifiedDate) 
SELECT TOP 50000 TransactionID, ProductID, ReferenceOrderID, ReferenceOrderLineID, TransactionDate, TransactionType, Quantity, ActualCost, ModifiedDate from Production.TransactionHistoryArchive ORDER BY ReferenceOrderID ASC
select * from #local_variable where RowNumber > (@PageNumber-1)*@PageSize and RowNumber <= @PageNumber*@PageSize

SET @end=getdate();
PRINT Datediff(millisecond,@Start,@end);

4、ROW_NUMBER

 

--使用 ROW_NUMBER
DECLARE @Start datetime,@end datetime;
SET @Start=getdate();

DECLARE @PageNumber INT, @PageSize INT, @Sql varchar(max);
SET @PageNumber=5000;
SET @PageSize=10;
SELECT * FROM
( SELECT ROW_NUMBER()
OVER(ORDER BY ReferenceOrderID) AS RowNumber,
*
FROM Production.TransactionHistoryArchive) AS T
WHERE T.RowNumber<=@PageNumber*@PageSize AND T.RowNumber>(@PageNumber-1)*@PageSize;

SET @end=getdate();
PRINT Datediff(millisecond,@Start,@end);

SQL数据分页技术

标签:

热心网友 时间:2022-04-07 20:20

要想分页,首先得做好准备工作。你要先声明每页显示多少条数据,还得获取当前选择的是多少页的页码。有了这两个分页就好办了。
sql如下:select top 10 from tableName
where (id not in(select top 20 from tableName order by Id desc)) order by Id desc
每页显示的数量:自己定义。
总页数:数据总条数/每页显示的条数
当前页码的计算方法:(页码-1)*每页显示的数量。比如我要浏览第3页的数据,3从客户端传送过来后,在后台对页码进行处理:(3-1)*每页显示的数量(假如是10).算出来后的结果就是20.你在把20以参数注入的方式动态添加到上面那个20那里就ok了。

sql中的10表示你每页显示的数据,这里跟10,就代表每页显示10条。(你可以定义一个常量作为每页显示的条数)
where中的20表示不包括前面的20条数据,也就是查询出从第21条到30之间的数据。
不知道我这样说你是否理解,其实只要理解了sql语句,分页就很好做了。
SQL数据库分页原理

总页数:数据总条数/每页显示的条数 当前页码的计算方法:(页码-1)*每页显示的数量。比如我要浏览第3页的数据,3从客户端传送过来后,在后台对页码进行处理:(3-1)*每页显示的数量(假如是10).算出来后的结果就是20.你在把20以参数注入的方式动态添加到上面那个20那里就ok了。sql中的10表示你...

SQL子查询优化&amp;分页查询优化原理

对于超过特定阈值的页数,可以采用调整SQL的方式进行优化。例如,先快速定位需要获取的ID段,然后关联查询。优化前的SQL查询操作涉及访问索引叶子节点,再根据主键值查询聚簇索引上的数据。优化后的SQL通过右连接子查询,减少数据访问次数。在验证优化原理时,通过比较两个查询在缓冲池中加载的数据页数量,证实...

Oracle常见SQL分页实现方案

这种方式的原理大致为 首先通过ROWNUM查询到分页之后的 条实际返回记录的ROWID 最后通过ROWID将最终返回字段值查询出来并返回 和前面两种实现方式相比 该SQL的实现方式更加繁琐 通用性也不是非常好 因为要将原始的查询语句分成两部分(查询字段在最外层 表及其查询条件在最内层)但这种实现在特定场景下还是有...

MySql中查询语句实现分页功能

第一部分:看一下分页的基本原理:对上面的mysql语句说明:limit 10000,20的意思扫描满足条件的10020行,扔掉前面的10000行,返回最后的20行,问题就在这里,如果是limit 100000,100,需要扫描100100行,在一个高并发的应用里,每次查询需要扫描超过10W行,性能肯定大打折扣。文中还提到limit n性能是没问...

SQL SEVER中如何实现分页?

'下面是我用VB.net写的 可能你看不懂.原理很简单,'就是把 你的数据从数据库读出来,加载到DataSet里面.'对dataset的tataTable进行处理,如我5条记录分一次页.Dim dt As DataTable = Nothing Dim x As Integer = 0 Dim i As Integer = 1 '判断有多少页面...Public ReadOnly Property pages()...

SQL技巧:结果集分页查询

在大量数据的背景下,优化数据库查询效率,尤其是实现结果集的分页,是至关重要的任务。本文将深入讲解在Oracle数据库中进行分页查询的技巧,无论是在早期版本还是新版本中,如Oracle 12c及以上。在Oracle中,有多种方法实现分页,包括使用ROWNUM(适用于所有版本),FETCH FIRST/NEXT和OFFSET子句(Oracle ...

ms sql数据库,有37万条记录,不知道如何才能轻松的分页显示?

一次性全部读取当然会超时,介绍你一种最简单的方法 先设定: Rs.Pagesize=RsPageSize 和 Rs.AbsolutePage 在循环显示的时候 Do While (Not Rs.Eof) And (RsPageSize&gt;i)...i=i+1 Rs.movenext Loop 总之就是显示当前指针附近的几页,一次可以显示10页或者3页 其实百度的分页也就是这个原理 有...

sql server 求和后如何分页?请看SQL语句

--10代表分页的大小 select top 10 from test where id not in (--40是这么计算出来的:10*(5-1)select top 40 id from test order by id )order by id 原理:需要拿出数据库的第5页,就是40-50条记录。首先拿出数据库中的前40条记录的id值,然后再拿出剩余部分的前10条元素 第二种方法...

sql server 求和后如何分页?请看SQL语句

--10代表分页的大小 select top 10 from test where id not in (--40是这么计算出来的:10*(5-1)select top 40 id from test order by id )order by id 原理:需要拿出数据库的第5页,就是40-50条记录。首先拿出数据库中的前40条记录的id值,然后再拿出剩余部分的前10条元素 第二种方法...

SQL如何实现数据分页,要具体语句,谢谢

分页存储过程如下 CREATE PROCEDURE GetRecordFromPage tblName varchar(255), -- 表名 RetColumns varchar(1000) = '*', -- 需要返回的列,默认为全部 Orderfld varchar(255), -- 排序字段名 PageSize int = 10, -- 页尺寸 PageIndex int = ...

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
空调上面有个雪花是什么标志? 民法典中如何更改孩子的抚养权 晚上十二点多出来捡到一兜东西,里面有矿泉水瓶,杯子,还有一个盒子里面装... 客厅里水杯底部夜里无故破碎什么原因 婆婆晚上九点左右喝完水,杯子 除夕过了十二点了杯子没放好破了 零晨十二点打碎了杯子好不好 快递客服用什么智能输入法好?要输入很多地名 现在的公关,文秘,文员,秘书,客服都是用什么输入法的?有谁是这些的工作... 息灭的近义词 息灭的近义词和反义词是什么_息灭是什么意思? 机械加工零件成本分析模板 衣服上有异味怎么办? 衣服不小心沾了东西,有味道,如何去除衣服上的异味啊 小米手机怎么安装最新版本微信 机械外加工怎么报价 gm220 路由器是全网通吗? gm220s路由器怎么防止别人蹭网? 发票买回来在金税盘上要怎么操作才能开票 提前祝你七夕快乐的句子 苹果6sps怎么老是开关机呢 女生多次遭同学霸凌,内衣穿在校服外,父亲看到照片泣不成声,你怎么看? 185从长春到合隆公交最晚的几点 我们学校发了校服,女生是短裙,粉红色和蓝色,很短,一弯下来就露了,现在很冷老师说必须穿,为什恶魔. 我坐长春185路到哪站倒235路到绿园站 女生放学回家后还会穿着校服吗,她们会/(是)穿着校服洗澡吗 长春大年初一185公交正常发车吗? 我用迅雷下载,总是说您输入的URL不合法请重新输入是什么意思啊 女生尿尿需要脱下外面的裤子和里面的秋裤吗? 长春185公交车过年那天通车吗? 有深圳校服美女图片吗? 孕妇梦见偷菜生男女 梦见自己偷菜bi狗咬 统帅三匹一拖一风管机型号是多少 格力家用中央空调系列产品有哪些 手写签名图片如何加粗 如何使图片的文字变粗 PS如何把图像里的字体颜色加粗 插入WORD中的图片上的文字可以加粗吗?应该怎么做呢? sql分页的几种写法 揭西社保局微信公众号 揭阳台民生热线栏目的微信公众号 揭阳一中微信公众号是什么 怎么样查看以前的揭阳新闻啊 啊啊 广东揭阳菜地突起约3米高是什么原因? 揭阳一女孩在幼儿园午休死亡,家属为何会质疑? 揭阳市人民医院 - 信息提示 微信被骗 知道他手机号 如何整他? 苹果手机怎样有效的拦截呼死你电话和验证码信息 荷兰小冬瓜怎么做好吃
  • 焦点

最新推荐

猜你喜欢

热门推荐