You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server执行SELECT *返回行数与表存储属性记录数不符原因排查

SQL Server表查询行数与存储记录数不一致的常见原因
  • 未提交事务的影响:当存在未提交的INSERT或DELETE操作时,表存储属性显示的记录数会包含这些未提交的行,但默认READ COMMITTED隔离级别下的SELECT *查询无法读取未提交的数据。可以通过切换到READ UNCOMMITTED隔离级别执行计数查询验证:

    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
    SELECT COUNT(*) FROM 你的表名;
    

    如果结果接近存储属性的记录数,说明是未提交事务导致的差异。

  • 堆表中的幽灵记录:没有聚集索引的堆表在删除行后,被标记为删除的行不会立即被清理,这些“幽灵记录”仍会被存储属性的统计计数包含,但SELECT *不会返回它们。可以通过重建表来清理这些记录:

    ALTER TABLE 你的表名 REBUILD;
    

    重建后再对比行数,若一致则是该原因。

  • 过时的统计信息:存储属性显示的记录数通常来自系统统计信息,如果统计信息未及时更新,就会与实际查询的实时行数产生偏差。执行以下语句更新统计信息后再查看:

    UPDATE STATISTICS 你的表名 WITH FULLSCAN;
    
  • 分区表的统计偏差:若表是分区表,存储属性的记录数是各分区统计数据的总和,若分区统计过时,就会出现总和与实际查询行数不符的情况。同样可以用上面的UPDATE STATISTICS语句带FULLSCAN参数更新全表统计。

  • 系统视图延迟更新:存储属性的数值一般来自sys.dm_db_partition_stats等系统视图,这些视图的数据并非实时同步,可能存在延迟。等待一段时间或手动刷新系统元数据后,数值会趋于一致。

内容的提问来源于stack exchange,提问作者Samuel.anderson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 08:02:34