我自己写了一个分页存储过程,大家指点指点,第一次写存储过程,还有不少是不懂的,希望高手指点。
create proc articlePages
@pageIndex int, --页数
@pageSize int, --页面显示的数据量
@dbFields varchar(1000) --查询的列名
as
declare @strSql varchar(5000) --查询的Sql语句
if @pageIndex = 1
set @strSql=select top+ + str(@pageSize) + + + @dbFields + from article order by id desc
else
begin
set @strSql = select top+ + str(@pageSize) + + @dbFields + +from article
set @strSql = @strSql + + where id <(
set @strSql = @strSql + select min(id) from (
set @strSql = @strSql + select top + str((@pageIndex-1)*@pageSize) + + id from article order by id desc) as t +) order by id desc
end
exec(@strSql)
GO
直接输入页数就可以了,以下是我测试的结果,数据量是655351,呵呵,还不到百万数据啊。
100页时
SQL Server 执行时间:
CPU 时间 = 0 毫秒,耗费时间 = 1 毫秒。
1000页时
SQL Server 执行时间:
CPU 时间 = 0 毫秒,耗费时间 = 7 毫秒。
10000页时
SQL Server 执行时间:
CPU 时间 = 78 毫秒,耗费时间 = 108 毫秒。
20000页时
SQL Server 执行时间:
CPU 时间 = 172 毫秒,耗费时间 = 188 毫秒。
30000页时
SQL Server 执行时间:
CPU 时间 = 265 毫秒,耗费时间 = 265 毫秒。
感觉还可以
不错啊,比我们的好多了, 1000以上就20了.向你学习
up
请问你在程序里是怎样调用这个存储过程的?
比如页面上有 首页、上一页、下一页、末页四个按扭。
很不错,收藏了,供以后参考
存储过程分页已经有很多人写过了,代码大致上都差不多了,也没什么好说的了。你还是多注意下数据库表的 自身设置比如索引^^
带查询条件的你好象没有考虑吧....