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

 ·牛人门,怎么做jdbc的缓存    »显示摘要«
    摘要: ^_^:请教拉. ......
    摘要: 史海钩沉:义和团:中国一百年的阴影 zt ......


一个简单问题:获取表的记录总数

各位大侠:我用下列语句获取表cp307的记录总数,怎样才能这个数值--我在vb中用!怎样把这个数值赋给一个变量。  
   
  select   count(*)   as   num   from   cp307  
   
  另外,如果表的记录达到1000多万条时,统计记录总数用时达9秒,有没有更快的方法获得表的记录总数

NO.1   作者: duanduan1122

declare   @a   int  
  select   @a=count(*)   as   num   from   cp307  
   
 

NO.2   作者: duanduan1122

只要你在你的表上创建任何一个索引,查询表的总数就会提高很多.

NO.3   作者: duanduan1122

因为sql   server查询优化器这时候是扫描的索引,不在是表了.

NO.4   作者: MorningTea

----不好意思,漏了一点,是里面的rowcnt  
  从系统的表里面查询  
  select   rowcnt   from   sysobjects   S   inner   join   sysindexes   I  
  on   S.[id]   =   I.[id]    
  where    
  I.[name]   =   表名   and   S.xtype   =   u  
 

NO.5   作者: summerICEREDTEA

呵呵      
  楼上的方法好  
  不过   只适用与MSSQL   lol

NO.6   作者: bugchen888

----不好意思,漏了一点,是里面的rowcnt  
  从系统的表里面查询  
  select   rowcnt   from   sysobjects   S   inner   join   sysindexes   I  
  on   S.[id]   =   I.[id]    
  where    
  I.[name]   =   表名   and   S.xtype   =   u  
   
   
  这个得到的真的是表的真实的行数吗?

NO.7   作者: MorningTea

就是这样,前面我还关联了sysobjects   ,不关联也是可以的,其实就存在sysindexes表格里面  
  select   rows   from   sysindexes   where   id   =   object_id(表名)   and   indid   in   (0,1)    
   
  索引分为2种,聚簇索引和菲聚簇索引两种,皆使用B-tree的方式来排列索引页。聚簇索引会将设为索引的栏位依序排列,并且也依照排好的顺序将纪录存储在资料表中。  
   
  select   count(*)   as   c   from   tableA   。然而对于记录数巨大的表,上述做法将会非常耗时。在纪录很多时候很费时,如果在表的某个字段上做聚簇索引,第一次执行该语句的时间和没有索引的时间差不多,之后执行上述语句,速度很快,在1秒中以内,但当表的记录数发生较大变化后,再执行该语句又会经历一次耗时的过程。而且不是每个表都适合做聚簇索引的,对于数量巨大的表,如果需要经常增删操作,建聚簇索引是一个很不明智的做法,将会极大的影响增删的速度,因为聚簇索引需要将排序好的纪录实际存储在资料表中。你只是偶尔会需要获取某些表的记录总数,用于判断表的记录总数是否过大,是否需要备份数据等。因此为了偶尔的动作建立一个索引,那么非常不明智。  
   
  --摘贴~  
  在MS   SQL   数据库中每个表都在sysindexes   系统表中拥有至少一条记录,该记录中的rows   字段会定时记录表的记录总数。下面是sysindexes   表的相关记录的含义:    
  列名             数据类型                   描述  
  id                         int                 ID(如果   indid   =   0   或255)。否则为索引所属表的ID  
  Indid               smallint           索引ID:  
                                                    0=表  
                                                    1=聚簇索引  
                                                  >1=非聚簇索引  
                                                255=具有text或image数据的表条目。  
  rows                     int             基于indid=0   和   indid=1地数据级行数,该值对   indid>1重   复。如果indid=255,rows设置为0。  
       
       
  当表没有聚簇索引时,Indid   =   0   否则为   1。  
   
 


    摘要: 谁能告诉我:public void mymethod(string a,int b,float c)的正确重构方法是哪个? private void mymethod(string a,int b,float c) public string mymethod(string a,int b,float c) public void mymethod(string a,float b,int......
» 本期热门文章:

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