Asp.net 几种分页方法效率比较
ASP.net 的DataGrid 控件的内置分页功能一直不被看好,原因是它先把所有数据从数据库读出来再进行分页。在数据量很大的情况下,用它内置的分页功能被认为几乎是不可能的事。对海量数据的读取和分页,大家会通过自定义分页来实现。其核心技术是SQL语句的设计。一般有三种方案:
方案一:(利用SQL的游标存储过程分页)
create procedure XiaoZhengGe @sqlstr nvarchar(4000), --查询字符串 @currentpage int, --第N页 @pagesize int --每页行数 as set nocount on declare @P1 int, --P1是游标的id @rowcount int exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output select ceiling( 1.0*@rowcount/@pagesize) as 总页数--,@rowcount as 总行数,@currentpage as 当前页 set @currentpage=(@currentpage-1)*@pagesize+1 exec sp_cursorfetch @P1,16,@currentpage,@pagesize exec sp_cursorclose @P1 set nocount off ------------------------------------- 方案二:(利用SELECT TOP和Not In分页)
SELECT TOP 页大小 *
FROM TestTable WHERE (ID NOT IN (SELECT TOP 页大小*页数 id FROM 表 ORDER BY id)) ORDER BY ID ------------------------------------- 分页方案三:(利用SELECT TOP和ID>MAX(id)分页)
SELECT TOP 页大小 *
FROM TestTable WHERE (ID > (SELECT MAX(id) FROM (SELECT TOP 页大小*页数 id FROM 表 ORDER BY id) AS T)) ORDER BY ID 有网友通过SQL 查询分析器进行比较,得出结论:
方案三(利用ID>MAX(id))效率最高;
方案二(利用Not In) 效率次之; 方案一(利用SQL的游标存储过程分页)最为通用,但效率最差。
事实果真是这样吗?这三种方案就是比DataGrid 控件的内置分页功能好吗?我以前用Access做程序时发现Not in语句效率很低的呀?于是决定亲自试一试。
装SQL有点麻烦,就用 Access 吧,方案一用存储过程分页没有试验。
用Access新建一Book.mdb文件,打开后建一表mytable,加入五个字段:ID,name,author,islend,username。建好表后向内灌入一定数量的记录,以方案二、方案三和DataGrid 控件的内置分页功能分别写一个 .aspx 文件,同时写一 .asp 文件进行比较。
测试条件:P4 2.4G,256MDDR,WindowsXP,IIS,每页20条记录。
ID>MAX(id)语句:string sqlstr="Select Top "+PageSize+" * from mytable where(ID >(select MAX(ID) from(select top "+(PageSize*CurrentPage)+" ID from mytable order by ID asc))) order by ID asc";
Not In语句:string sqlstr="Select Top "+PageSize+" * from mytable where ID not in(select top "+(PageSize*CurrentPage)+" ID from mytable order by ID asc) order by ID asc";
运行结果如下:
通过比较可见,DataGrid 控件的内置分页功能的确不怎么样,但比起一直比较流行的 Not in 语句分页是好多了,至少在20多万条记录的情况下能显示网页。 有人说asp.net 因为是编译执行,运行速度上比asp要快。通过测试没发现快多少。 另:据说 DataList 控件比 DataGrid 控件数据显示性能方面要好一些,可能是真的。我对这两个控件也分别进行了测试,没感觉有多大差异,至少在27万条记录的情况下觉不出来。 难道想象和现实之间的差距真的这么大吗? |
Asp.net 几种分页方法效率比较
最新推荐文章于 2024-07-14 01:26:03 发布