http://community.csdn.net/Expert/icView3.asp?id=4180563
http://www.jyklzz.com/bbs/ 演示页面
感谢大家的支持!!!
昨天发了一个邀请,邀请大家帮忙测试,效果还可以,下面小结一下:
通过内部的计数器得知:访问次数是1071,人数不是太理想,本来是想看看上万人同时访问的情况:)
系统资源的占用情况
内存 —— 很理想。SQL占用的内存最大也没有超过65M,一般是在35M左右;asp.net占用的内存最大也没有超过40M,一般是在25M左右。
CPU:8%左右,由于访问次数不多,也不够集中,所以这个数值也说明不了什么。自己连续点了n次下一页,发现CPU的使用率飘高,达到了50%左右。
但是对于100万的记录,AMD XP2000+ 的CPU 几十毫秒的放映速度,因该是可以接受的,甚至是很理想的吧。
毕竟服务器的CPU要比我的快很多吧,而且记录也很难达到100万吧。
结果还是很满意的,但是美中不足的是,我想看一下海量访问的情况下的效果,
希望大家再支持一下,多点几下,谢谢了。呵呵
另外说明一下:前n页可以在60毫秒内完成,n应该是大于500的,小于多少嘛还没有测试。后n页就比较慢了,需要500毫秒左右。
下面讨论一下翻页的技巧吧。
我没有用游标、临时表、not in、in 这些方法,并不是说他们的效率不高,而是我还没有测试过。我只用了 top ,查了两次表。
大家也可提供一些其他的方法,我来测试一下,看看在100万条的情况下的效果。
学习
up
翻页那里我现在用的DataGrid自定义分页,可能性能远不如此
学习
学习一把
看了还是有收获
不过我这里执行时间有时候是47毫秒
学习!
不错啊。
study
麻烦楼主测试一下这个存储过程,看速度如何?
愿意一起讨论分页
CREATE proc page
@RecordCount int output,
@QueryStr nvarchar(100)=table1,--表名、视图名、查询语句
@PageSize int=20, --每页的大小(行数)
@PageCurrent int=2, --要显示的页 从0开始
@FdShow nvarchar (1000)=*, --要显示的字段列表
@IdentityStr nvarchar (100)=id, --主键
@WhereStr nvarchar (200)=1=1,
@FdOrder nvarchar(100)=desc --排序 只能取desc或者asc
as
--by quxh 2005.7.19
declare
@sql nvarchar(2000)
set @WhereStr = replace(@WhereStr, ;, )
set @WhereStr = replace(UPPER(@WhereStr), DELETE, )
set @WhereStr = replace(@WhereStr, DROP, )
set @WhereStr = replace(@WhereStr, UPDATE, )
set @WhereStr = replace(@WhereStr, FROM, )
set @WhereStr = replace(@WhereStr, --, )
set @WhereStr = replace(@WhereStr, EXECUTE, )
if @WhereStr = begin
set @WhereStr = 1=1
end
if @PageCurrent = 0 begin
set @sql = select top + cast(@PageSize as nvarchar(3)) + + @FdShow + from + @QueryStr + where + @WhereStr + order by + @IdentityStr + + @FdOrder
end
else begin
if upper(@FdOrder) = DESC begin
set @sql = select top + cast(@PageSize as nvarchar(3)) + + @FdShow + from + @QueryStr + where + @WhereStr + and + @IdentityStr + < ( select min( + @IdentityStr + ) from (select top + cast(@PageSize*@PageCurrent as nvarchar(10)) + + @IdentityStr + from + @QueryStr + where + @WhereStr + order by + @IdentityStr + desc) as t) order by + @IdentityStr + desc
end
else begin
set @sql = select top + cast(@PageSize as nvarchar(3)) + + @FdShow + from + @QueryStr + where + @WhereStr + and + @IdentityStr + > ( select max( + @IdentityStr + ) from (select top + cast(@PageSize*@PageCurrent as nvarchar(10)) + + @IdentityStr + from + @QueryStr + where + @WhereStr + order by + @IdentityStr + asc) as t) order by + @IdentityStr + asc
end
end
--print @sql
execute(@sql)
if(@RecordCount is null or @RecordCount<0)begin
declare @tsql nvarchar(200)
set @tsql=Nselect @RecordCount = count(*) from + @QueryStr + where + @WhereStr
exec sp_executesql @tsql,N@RecordCount int output,@RecordCount output
select @RecordCount--这行没什么用处,可以不加
end
GO
也是用的top实现的,还有,上面的过滤好象没有什么用,因为ADO.NET似乎可以处理这些安全问题
gz
不好意思,楼主,才看到这句话:
你可以不用看实现过程呢,就是测试一下速度就行
调用方式:
CREATE proc Bmhd_News_GetNewsetByKindAndField
@kindid int,
@recordcount int out,
@PageSize int=20,
@PageIndex int=0,
@field nvarchar (40)
as
declare @wherestr nvarchar(400)
set @wherestr = kindid = + str(@kindid) + and field = + str(@field)
exec page @recordcount out,News,@PageSize,@PageIndex,*,id,@wherestr,desc
return 0
GO
论坛删除帖子也是很常见的,如果中间包含删除的帖子,ID就会不连续,这个怎么办?
学习
学习
学习
标记...又是分页啊
如果要结合多个字段进行排序呢?如时间等