今天在程序中用到了数据库分页,弄了半天找到两种办法:
以sqlserver2000自带的演示数据库:NorthWind为例,取表Customers中的第10到第20条记录:
1)使用table变量(临时表)的方法:










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



















注:这段代码在数据库中是不能执行的,原因应该是Sqlserver2000不支持在top后面跟参数:(如果在程序中
给SqlCommand传入参数,结果还是一样的。不过还是很容易解决这个问题,毕竟最后都是字符串,用String.Replace()方法将@item*@pageViewSize和(@item-1)*@pageViewSize替换成具体的数值就行了:)
2)直接使用查询语句:








这个方法我没怎么用,具体情况要试了才知道。不过听同事说好像临时表的方法执行效率要高一些,不知道有没有人帮我做一下解答,为什么临时表的效率高呢?
还有我还想问个问题,就是如果数据量很大的话,两种方法都会需要操作大量数据,无论是临时表的Insert,还是第二种方法的Select,数据量越大,就会越慢。不知道有没有办法解决这个问题,或者有没有别的更好的办法?
还有,数据库分页仅仅是提高效率的一种手段,在b/s程序的服务器端代码中(我用的是c#)还可以加上一个cache,将用户最常用的数据放到里面,这样尽量减少用户访问数据库的次数,也能大幅度提高效率。不过我没做过,好像有几种这方面的算法,比如MRU,LRU等,不知道有没有哪位大侠知道,给我个思路,最好能给我一个较完整的解决方案。 先谢谢了:)