当前位置: 首页 > 编程笔记 >

SQL Server利用sp_spaceused如何查看表记录存在不准确的情况

叶举
2023-03-14
本文向大家介绍SQL Server利用sp_spaceused如何查看表记录存在不准确的情况,包括了SQL Server利用sp_spaceused如何查看表记录存在不准确的情况的使用技巧和注意事项,需要的朋友参考一下

前言

在之前写过一篇博客"关系数据库如何快速查询表的记录数",里面介绍了使用sp_spaceused查看表的记录数是否正确的问题,具体如下:

关于问题3:有多个索引的表,是否记录数会存在不一致的情况?
 
   答案:个人测试以及统计来看,暂时发现多个索引的情况下,sys.partitions中的rows记录数都是一致的。暂时没有发现不一致的情况,当然也不排除有特殊情况。
 
关于问题5: 分区表的情况又是怎么样?
 
   答案:分区表和普通表没有任何区别。
 
关于问题6:对象目录视图sys.partitions与sp_spaceused获取的表记录函数是否准确?
 
   答案:对象目录视图sys.partitions与sp_spaceused获取的表记录数是准确的。

但是,今天遇到一个问题,直接推翻了之前博客里面下的这个结论。如下截图所示,发现不同的索引的记录数不一样。所以问题3,应该这样回答:

    大部分情况下,sys.partitions中的rows记录数都是一致的。但是也有发现不同索引的rows不一致的情况

另外,也发现sp_spaceused 中返回的记录数跟SELECT COUNT(*) 不一致。但是从碎片,统计信息等各个方面都分析了一下,实在没有搞清楚什么原因会导致这种情况出现。在数据库找了一下,发现这样的情况非常少,但是确实也是存在的。特此记录一下

sp_spaceused 'dbo.spcecial_table';
 
SELECT partition_id, object_id, index_id,row_count 
FROM sys.dm_db_partition_stats 
WHERE object_id= OBJECT_ID('dbo.spcecial_table')
 
 
 
 
SELECT object_id, index_id, rows FROM sys.partitions
WHERE object_id= OBJECT_ID('dbo.spcecial_table')
 
 
 
SELECT object_id, index_id, rows FROM sys.partitions
WHERE object_id= OBJECT_ID('spcecial_table');
 
 
SELECT COUNT(*) FROM spcecial_table

如下截图所示,sp_spaceused 获取的记录数为8718528, 但是SELECT COUNT(*)为8735537。

 

关于问题6:对象目录视图sys.partitions与sp_spaceused获取的表记录函数是否准确?

  答案:对象目录视图sys.partitions与sp_spaceused获取的表记录数是准确的。

正确答案:对象目录视图sys.partitions与sp_spaceused获取的表记录数是大部分是准确的。但是也存在记录数不准确的情况。只是目前不清楚在什么场景下,会出现不准确的情况。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对小牛知识库的支持。

 类似资料:
  • 问题内容: 在嵌入式访问vb编辑器的帮助下,我编写了一个小代码来分析数据库的字段值,并希望最终查看打开的访问内的表中的记录集。作为新手,我只能使用Debug.Print来显示字段名称。谁能告诉我我可以使用哪些语句/命令执行SQL String以便查看带有值的结果记录集? 问题答案: 据我所知,无法显示包含记录集的VBA实例的数据表。如果记录集的源是strQSL,则可以使用结果创建一个表,然后打开该

  • 在轻推的手机端/电脑端/网页端,轻推管理助手每天准时自动推送前一日企业成员登录情况。支持导出未登录/未激活用户。 电脑端: 手机端:

  • 我可以通过用户是否投票来限制所有问题。在模型中: 在控制器中,我这样称呼他们: 作用域未应答的\u不正确。我基本上是想找到没有投票权的地方。相反,它试图寻找是否有不等于当前用户的投票。有没有办法返回不存在连接的所有记录?

  • 我们通过云服务提供商(CSP)订阅了Azure,这对我们可以在Azure中获取和看到的内容造成了一些限制。尽管如此,我们可以看到每个应用服务计划的CPU和内存使用率。 我们如何在计划下看到特定应用服务的相同情况? 如果我看到计划的CPU/内存利用率异常,如何判断是哪个应用服务导致的?

  • 问题内容: 使用: 我有一张桌子: 还有其他一些表(大约还有200个表),其中一些用作上的外键。 因此,我想找出-哪些表使用此外键()? 我正在使用访问我的sql-server 。 问题答案: 在SQL Server Management Studio中,可以在对象资源管理器中右键单击表,然后选择“查看依赖项”。这将打开一个新窗口,您可以在其中查看依赖于表以及表所依赖的所有其他对象(不仅仅是表)。

  • 问题内容: 我必须每20秒阅读一次CSV。每个CSV都包含最小值。500至最大 60000行。我必须将数据插入Postgres表中,但是在此之前,我需要检查是否已插入项目,因为很有可能会获得重复的项目。检查唯一性的字段也已建立索引。 因此,我分块读取文件,并使用IN子句获取数据库中已有的项目。 有更好的方法吗? 问题答案: 这应该表现良好: 与这个答案密切相关。