SQL Server 分页查询

PS,此文是纯个人笔记;

公司里一个项目里用到了一种数据库分页查询的方式:

1、定义一个临时的table ,这个table有一个自增的之间ID,和要查的数据表的主键ID

2、再一次查询,用id在分页数段来and 一下结果;

具体操作如下:

定义个临时表@Temptable

declare @Temptable table(id int identity(1,1),nid nvarchar(50),updatetime smalldatetime) --含有临时表的主键ID--id,待查数据集结果的ID,以及更新时间
将结果集插到临时表中;

insert into @Temptable(nid,updatetime)
select TargetTable.nid,TargetTable.updatetime --目标表的待查字段
from TargetTable

where  (查询条件)
order by TargetTable.updatetime desc --安时间排序一下
再一次查询,并联合临时表查询,并加上分页条件

select TargetTable.arg1,TargetTable.arg2,TargetTable.arg3 from TargetTable --实际要查询的表字段内容
inner join @Temptable Temp  --内联临时表
on Temp.nid = TargetTable.nid  
where (查询条件)
and (Temp.id between 分页起点 and 分页结束)  --分页条件 比如说1到20个数据结果

这是公司的一个小项目中的分页查询。可以肯定的是,这样的查询对小行的系统可行。如果碰到了大型的数据库,数据量超大的时候,这种查询将会是个炸弹!

因为临时表会占用内存,如果要查询的TargetTable是数据量很大的表的话,临时表建立需要一大段的时间,这要消耗服务器的内存和CPU资源。如果仅仅是为了一个分页效果而牺牲服务器资源,这样是不是有点搞笑啊。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值