繁体   English   中英

SQL表Rowcount与SQL Server中的Select Count不同

[英]SQL Table Rowcount different from Select Count in SQL Server

我正在使用Microsoft SQL Server。

我有一个表已更新80行。

如果我右键单击并查看表属性,rowcount表示10000但是TableName中的select Count(id)表示10080。

我检查了统计数据,他们的行数也是10080。

为什么Rocount in Properties和Select Count之间存在差异?

谢谢,S

此信息很可能来自sysindexes表(请参阅文档),并且sysindexes中的信息不保证是最新的。 这是SQL Server中的一个已知事实。

尝试运行DBCC UPDATEUSAGE并再次检查值。
参考: http//msdn.microsoft.com/en-us/library/ms188414.aspx

DBCC UPDATEUSAGE更正表或索引中每个分区的行,已用页,保留页,叶页和数据页计数。 如果系统表中没有不准确,DBCC UPDATEUSAGE不返回任何数据。 如果找到并更正了不准确性并且未使用NO_INFOMSGS,则DBCC UPDATEUSAGE将返回系统表中正在更新的行和列。

例:

DBCC UPDATEUSAGE (0)

更新统计信息。 这是RDBMS了解表和索引当前状态的唯一方法。 这也有助于RDBMS选择正确的执行路径以获得最佳性能。

SQL Server 2005

UPDATE STATISTICS dbOwner.yourTableName;

神谕

UPDATE STATISTICS yourSchema.yourTableName;

属性信息缓存在SSMS中。

有多种方法可以检查表的大小。

http://blogs.msdn.com/b/martijnh/archive/2010/07/15/sql-server-how-to-quickly-retrieve-accurate-row-count-for-table.aspx提到4种不同的准确度和速度。

可靠的全表扫描有点慢..

SELECT COUNT(*) FROM Transactions

而快速的选择取决于统计数据

SELECT CONVERT(bigint, rows)
FROM sysindexes
WHERE id = OBJECT_ID('Transactions')
AND indid < 2

它还提到ssms gui使用查询

SELECT CAST(p.rows AS float)
FROM sys.tables AS tbl
INNER JOIN sys.indexes AS idx ON idx.object_id = tbl.object_id and idx.index_id < 2
INNER JOIN sys.partitions AS p ON p.object_id=CAST(tbl.object_id AS int)
AND p.index_id=idx.index_id
WHERE ((tbl.name=N'Transactions'
AND SCHEMA_NAME(tbl.schema_id)='dbo'))

并且一种快速且相对准确的表格大小的方法是

SELECT SUM (row_count)
FROM sys.dm_db_partition_stats
WHERE object_id=OBJECT_ID('Transactions')   
AND (index_id=0 or index_id=1);

不幸的是,最后一个查询需要超出基本选择的额

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM