Ken*_*her 14 sql-server sql-server-2008-r2 partitioning count sql-server-2012
系统视图sys.partitions有一列“行”,它是给定分区中的总行数。对于未分区的表(或只有一个分区,取决于您如何看待它),此列给出了表中的行数。
我很好奇这个列有多准确,我是否可以用它代替SELECT COUNT(1) FROM TableName. 我做了一些实验,创建一个表并添加几千行,删除几百行,再添加几千行等等,而且计数一直都在。但是,我有一张包含大约 7 亿行和几个索引的表。sys.partitions聚集索引的行再次失效,但是其他索引显示出一些细微的变化 (+-20k)。
有谁知道这一行是如何计算的,以及它是否像看起来一样准确?
Han*_*non 13
联机丛书指出行字段“指示此分区中的大致行数”。因此,我希望它在 100% 的时间内接近,但不是 100% 准确。
Michael Zilberstein 报告了一个sys.partitions在For want of a pin中极度错误的例子。不是说这是普遍现象,但这是可能的。
sys.dm_db_index_physical_stats包含一个record_count看起来更准确的字段,但请注意,如果您在托管 AlwaysOn 可读辅助副本的实例上运行 DMV,则运行 DMV 可能会导致 REDO 阻塞问题。
该解释的record_count字段显示以下信息:
记录总数。
对于索引,记录总数适用于 IN_ROW_DATA 分配单元中 b 树的当前级别。
对于堆,IN_ROW_DATA 分配单元中的记录总数。
对于堆,从此函数返回的记录数可能与对堆运行 SELECT COUNT(*) 返回的行数不匹配。这是因为一行可能包含多条记录。例如,在某些更新情况下,作为更新操作的结果,单个堆行可能具有转发记录和转发记录。此外,大多数大型 LOB 行在 LOB_DATA 存储中被拆分为多个记录。对于 LOB_DATA 或 ROW_OVERFLOW_DATA 分配单元,完整分配单元中的记录总数。
另请参阅Martin Smith对 Stack Overflow 上类似问题的回答。
| 归档时间: |
|
| 查看次数: |
4400 次 |
| 最近记录: |