MS SQLSERVER中如何快速获取表的记录总数

乔林儿

乔林儿

2016-01-29 16:02

MS SQLSERVER中如何快速获取表的记录总数,MS SQLSERVER中如何快速获取表的记录总数
在数据库应用的设计中,我们往往会需要获取某些表的记录总数,用于判断表的记录总数是否过大,是否需要备份数据等。我们通常的做法是: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地数据级行数,该值对于indid1重 复。如果indid=255,rows设置为0。
  
  
当表没有聚簇索引时,Indid = 0 否则为 1。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/sqlserver/)

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

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/sqlserver/)

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

展开更多 50%)
分享

猜你喜欢

MS SQLSERVER中如何快速获取表的记录总数

SQLServer
MS SQLSERVER中如何快速获取表的记录总数

MS SQLSERVER 中如何得到表的创建语句

SQLServer
MS SQLSERVER 中如何得到表的创建语句

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

ms sql删除重复的记录

SQLServer
ms sql删除重复的记录

Access转MS SqlServer的注意事项

编程语言 网络编程
Access转MS SqlServer的注意事项

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

如何确定Oracle数据库表中重复的记录

编程语言 网络编程
如何确定Oracle数据库表中重复的记录

如何获取Access系统表

编程语言 网络编程
如何获取Access系统表

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

网络防火墙 别当内网互访的绊脚石

网络防火墙 别当内网互访的绊脚石

用Sql server一次插入多条数据

用Sql server一次插入多条数据
下拉加载更多内容 ↓