sql ---获取记录条数

转载 2007年09月26日 14:29:00
在数据库应用的设计中,我们往往会需要获取某些表的记录总数,用于判断表的记录总数是否过大,是否需要备份数据等。我们通常的做法是:select count(*) as c from tableA 。然而对于记录数巨大的表,上述做法将会非常耗时。在DELL 4400 服务器上做试验,MS Sqlserver 2000 数据库对于100万记录的简单数据表执行上述语句,时间在1分钟以上。如果在表的某个字段上做聚簇索引,第一次执行该语句的时间和没有索引的时间差不多,之后执行上述语句,速度很快,在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。

那么现在大家应该知道如何获取表的记录总数了,只需执行如下语句:
select rows from sysindexes where id = object_id(tablename) and indid in (0,1)

该方法获取表的记录总数的速度非常快,在毫秒级就可以完成,相比select count(*) 要快上数万倍,但是大家在运用该方法是一定要主要,该方法得到的表的总记录数不是一个精确值,原因是MS SQL 并不是实时更新该字段的值,而是定时更新,当从实践来看该值和精确值一般误差不大,如果你希望快速的粗略估算表的大小,建议你采用该方法。如果你希望得到精确值,那么请在执行上述语句前执行DBCC UPDATEUSAGE(DatabaseName,[TABLENAME]) WITH ROW_COUNTS 强制更新该字段的值,但这样第一次更新时会耗费大量的时间,这样做的效果和建有聚簇索引的表 select count (*) 效果相差不大,所以如果你希望相对快速地得到精确的表的记录总数,那么你有两种选择,建聚簇索引或者先DBCC 再使用上述方法。

 

sql获取记录总数

最简单:select  count(*) from table 扩展:select  count(列名) from table where 条件
  • lanpy88
  • lanpy88
  • 2011年08月02日 11:02
  • 2649

SQL Server 查询表的记录数(3种方法,推荐第一种)

--SQL Server 查询表的记录数 --one: 使用系统表. SELECT object_name (i.id) TableName, rows as RowCnt FROM ...
  • smahorse
  • smahorse
  • 2012年11月07日 10:35
  • 38029

【abap-sql】限制OPEN SQL获取数据条数以及优化原则

select * into ......UP TO 5 ROWS.

ORACLE和SYBASE数据库中实现数据查询条数限制的SQL语句实现

一、概述 对于某些需要通过数据库与大量数据打交道的软件来说,处理性能相当的重要。为了保证软件能够将所有数据处理完而不至于崩溃,分批处理的思想应运而生。分批处理的具体做法是编写SQL语句,每次返回规定...
  • zhouzxi
  • zhouzxi
  • 2015年05月18日 18:50
  • 2477

SQL、MySQL、Oracle、 Sqlite、Informix数据库查询指定条数数据的方法

SQL查询前10条的方法为: select top X * from table_name  --查询前X条记录,可以改成需要的数字,比如前10条。 select top X * fro...
  • enuola
  • enuola
  • 2012年08月27日 11:15
  • 15828

hibernate HQL查询数据库表中记录的条数

/** * 获得表中记录的总条数 * * @param hql:HQL查询语句 * @return int 记录的总条数 */ public static int ...

NHibernate使用ICriteria分页并返回数据库记录总条数

转自:http://www.cnblogs.com/hongfei008/p/3524717.html 最近在使用NHibernate,发现进行分页查询无法得到数据库记录的总条数,在网上找了很久...

oracle count 百万级 分页查询记录总数、总条数优化

看到不错的文章记录一下:http://chwshuang.iteye.com/blog/1537487 oracle count 百万级 查询记录总数、总条数优化   最近做一个项目时,做分页...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sql ---获取记录条数
举报原因:
原因补充:

(最多只允许输入30个字)