在数据库应用的设计中,我们经常需要获得一些表的记录总数,可以用来判断表的记录总数是否过大,是否需要备份数据等。我们通常的做法是:从表a中选择count(*)作为c。但是,对于包含大量记录的表来说,这将非常耗时。在DELL 4400服务器上的实验中,MS Sqlserver 2000数据库对一个100万条记录的简单数据表执行上述语句,时间超过1分钟。如果对表的某个字段创建了聚集索引,则第一次执行该语句的时间与没有索引时的时间大致相同。之后,上述语句的执行速度非常快,在一秒钟之内。但是,当表中的记录数变化很大时,执行该语句将需要另一段时间。此外,并不是每个表都适合聚集索引。对于大量的表,如果需要频繁的增删,建立聚簇索引是不明智的,会大大影响增删的速度。那么有没有一个简单的方法可以快速得到一个表中的记录总数呢?答案是肯定的。
在MS SQL数据库中,每个表在sysindexes系统表中至少有一条记录,这条记录中的rows字段定期记录该表的记录总数。
以下是sysindexes表中相关记录的含义:
名称数据类型描述
ID int表的ID(如果indid = 0或255)。否则,它是该索引所属的表的ID。
Indismallint索引ID:
0 =表格
1 =聚集索引
& gt1 =非聚集索引
25 =包含文本或图像数据的表格条目。
Rows int基于indid=0和indid=1的数据级行数;这是针对indid >: 1副本的。如果indid=255,Rows设置为0。
当表没有聚集索引时,indid = 0;否则为1。
所以现在您应该知道如何获得表中的记录总数,只需执行以下语句:
从sysindexes中选择id = object_id(tablename)和indid in (0,1)的行
这个方法可以非常快速的得到表中的记录总数,毫秒级即可完成,比select count(*)快上万倍。然而,重要的是每个人都要使用这种方法。用这种方法得到的表中的记录总数并不是一个准确的值,因为MS SQL并不实时更新这个字段的值,而是定期更新。在实践中,这个值和精确值之间通常有很小的误差。如果你想快速粗略的估算出表格的大小,建议你用这个方法。如果要获得确切的值,请在执行上述语句之前,执行带有row _ counts的dbcc update usage (databasename,[tablename])来更新该字段的值,但第一次更新会花费很多时间。这种方法的效果类似于带有聚集索引的表select count (*),因此,如果希望相对较快地获得表的准确记录总数,有两种选择:构建聚集索引或先使用DBCC,然后使用上述方法。
关键词:记录,总数,采集,快速,
优侠库网站每天提供最新最热门的安卓手机软件、游戏下载、分享热门手游资讯攻略教程、手机软件教程步骤,专注安卓手机游戏软件下载。本文链接:http://www.123down.cn/gonglue/227228.html