当前位置:首页
开发技术指南» 文章正文
    引言:

    摘要: 在我们在做n层结构中,对数据表操作时,可能每个表都用一个接口实现,然后实现这个接口(petshop中那种方式) public interface atable { void insert(dto obj); void delete(dto obj); void update(dto obj); } public class atableole:atable { public void in......
    摘要: ms stdio2003怎样将一个cs文件编译成dll文件? ......


翻动100万级的数据 —— 只需几十毫秒 之揭秘篇:有详细的说明,不要错过。

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万条的情况下的效果。  
 

NO.1   作者: laohuchiren

学习

NO.2   作者: fanweiwei

up

NO.3   作者: molti

翻页那里我现在用的DataGrid自定义分页,可能性能远不如此

NO.4   作者: leo2003

学习

NO.5   作者: flashasp

学习一把

NO.6   作者: bomberwu

看了还是有收获

NO.7   作者: flashasp

不过我这里执行时间有时候是47毫秒

NO.8   作者: hipop

学习!

NO.9   作者: lovebanyi

不错啊。

NO.10   作者: wen98091

study  
 

NO.11   作者: iuhxq

麻烦楼主测试一下这个存储过程,看速度如何?  
   
  愿意一起讨论分页  
   
  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  
 

NO.12   作者: iuhxq

也是用的top实现的,还有,上面的过滤好象没有什么用,因为ADO.NET似乎可以处理这些安全问题

NO.13   作者: beijinboy

gz

NO.14   作者: iuhxq

不好意思,楼主,才看到这句话:  
   
   
  你可以不用看实现过程呢,就是测试一下速度就行  
   
  调用方式:  
  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  
 

NO.15   作者: yuekai

论坛删除帖子也是很常见的,如果中间包含删除的帖子,ID就会不连续,这个怎么办?

NO.16   作者: xu770

学习

NO.17   作者: xu770

学习

NO.18   作者: chx_xuxu

学习

NO.19   作者: liuqinglq

标记...又是分页啊

NO.20   作者: Haoye

如果要结合多个字段进行排序呢?如时间等


    摘要: thank ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE