SQL Server快速获得表的记录总数[MSSQL防范]
本文“SQL Server快速获得表的记录总数[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
在数据库利用的计划中,我们常常会需求获得某些表的记录总数,用于判断表的记录总数能否过大,能否需求备份数据等.我们普通的做法是: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 Server快速获得表的记录总数[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |