一勺抹茶

分享代码的乐趣

 

获取表的记录总数

select rowcnt from sysobjects S inner join sysindexes I
on S.[id] = I.[id]
where
I.[name] = 表名 and S.xtype = 'u'
前面我还关联了sysobjects ,不关联也是可以的,其实就存在sysindexes表格里面
select rows from sysindexes where id = object_id(表名) and indid in (0,1)

索引分为2种,聚簇索引(Clustered)和菲聚簇索引(Non-Clustered)两种,皆使用B-tree的方式来排列索引页。聚簇索引(Clustered)会将设为索引的栏位依序排列,并且也依照排好的顺序将纪录存储在资料表中。

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。

posted on 2005-07-31 16:12  MoreTea  阅读(864)  评论(0编辑  收藏  举报

导航