刚写的数据库分页的一段代码

本文介绍了在SQL Server 2000中实现数据库分页的两种方法:使用临时表和直接使用查询语句,并探讨了这两种方法的效率及适用场景。此外,还讨论了在数据量较大时如何优化分页查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在程序中用到了数据库分页,弄了半天找到两种办法: 

以sqlserver2000自带的演示数据库:NorthWind为例,取表Customers中的第10到第20条记录:

1)使用table变量(临时表)的方法:

declare @tempTable table 
(
id 
int identity(11not null,
 CustomerId 
nchar(5)
);

insert into @tempTable (CustomerId) select top 20 CustomerId from customers order by city;

select customers.* from customers, @tempTable as tempTable
  
where customers.customerid = tempTable.customerid and tempTable.id > 10

在程序中用变量表示分页的参数:

 

declare @pageViewSize int;
declare @pageViewSort varchar;
declare @item int;

select @pageViewSize =  10;
select @pageViewSort =   "desc";
select @item   = 5;

declare @tempTable table 
(
id 
int identity(11not null,
 CustomerId 
nchar(5)
);

insert into @tempTable (CustomerId) select top @item*@pageViewSize CustomerId from customers order by city;

select customers.* from customers, @tempTable as tempTable
  
where customers.customerid = tempTable.customerid and tempTable.id > (@item-1)*@pageViewSize

注:这段代码在数据库中是不能执行的,原因应该是Sqlserver2000不支持在top后面跟参数:(如果在程序中

给SqlCommand传入参数,结果还是一样的。不过还是很容易解决这个问题,毕竟最后都是字符串,用String.Replace()方法将@item*@pageViewSize和(@item-1)*@pageViewSize替换成具体的数值就行了:)

 2)直接使用查询语句: 

 


  
SELECT * FROM 
  (
SELECT TOP ItemsPerPage * FROM 
  (
SELECT TOP ItemsPerPage*CurrentPageIndex * FROM 
  (SelectCommand) 
AS t0 
  
ORDER BY SortField ASCAS t1 
  
ORDER BY SortField DESCAS t2 
  
ORDER BY SortField 

这个方法我没怎么用,具体情况要试了才知道。不过听同事说好像临时表的方法执行效率要高一些,不知道有没有人帮我做一下解答,为什么临时表的效率高呢?

还有我还想问个问题,就是如果数据量很大的话,两种方法都会需要操作大量数据,无论是临时表的Insert,还是第二种方法的Select,数据量越大,就会越慢。不知道有没有办法解决这个问题,或者有没有别的更好的办法?

还有,数据库分页仅仅是提高效率的一种手段,在b/s程序的服务器端代码中(我用的是c#)还可以加上一个cache,将用户最常用的数据放到里面,这样尽量减少用户访问数据库的次数,也能大幅度提高效率。不过我没做过,好像有几种这方面的算法,比如MRU,LRU等,不知道有没有哪位大侠知道,给我个思路,最好能给我一个较完整的解决方案。 先谢谢了:)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值