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资源。如果仅仅是为了一个分页效果而牺牲服务器资源,这样是不是有点搞笑啊。。。。