簡體   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