SQL Server查看数据库中每张表的数据量和总数据量

查询将返回每个表的名称和表中的数据行数(RowCounts),并按数据量从大到小排序

复制代码
-- 查询数据库中每张表的行数(数据量)
SELECT 
    t.name AS TableName,  -- 表的名称
    SUM(p.rows) AS RowCounts  -- 表中所有分区的行数之和,即该表的总行数
FROM 
    sys.tables t  -- 视图 sys.tables 存储数据库中的所有表
JOIN      
    sys.indexes i ON t.object_id = i.object_id  -- 视图 sys.indexes 存储每个表的索引信息,连接条件为表的对象 ID
JOIN 
    sys.partitions p ON i.object_id = p.object_id AND i.index_id = p.index_id  -- 视图 sys.partitions 存储每个表和索引分区的信息,连接条件为索引的对象 ID 和分区 ID
WHERE 
    t.is_ms_shipped = 0  -- 排除系统表,确保只查询用户表
    AND i.type <= 1  -- 只考虑堆(没有聚集索引的表)和聚集索引(类型 0 或 1),跳过非聚集索引
GROUP BY 
    t.name  -- 按表名分组,计算每张表的行数
ORDER BY 
    RowCounts DESC;  -- 按行数降序排列,最先显示数据量最大的表
说明:
  1. sys.tables : 这个视图包含了当前数据库中所有的表的信息。它有一个 object_id 列,唯一标识每个表。
  2. sys.indexes : 这个视图存储了与每个表相关的索引信息。每个表至少会有一个默认的聚集索引(如果没有聚集索引,则为堆表)。这里通过 i.type <= 1 来过滤:
    • type = 0 代表聚集索引(clustered index)。
    • type = 1 代表堆表(没有聚集索引的表)。
    • type > 1 代表非聚集索引,不计算在内。
  3. sys.partitions: 这个视图包含了与表的每个分区相关的数据,包括每个分区的行数。每个表可能会有多个分区,特别是在大表中,所以需要按分区聚合行数。
  4. t.is_ms_shipped = 0 : 这确保查询只包含用户创建的表,排除系统表。系统表的 is_ms_shipped 值为 1。
  5. GROUP BY t.name: 根据表的名称对数据进行分组,以便能够计算每个表的行数。
  6. ORDER BY RowCounts DESC: 按照每个表的行数从大到小排序,帮助我们快速识别数据量最大的表。
获取总数据量:

如果您希望查看数据库中所有表的总数据量,可以使用以下查询:

复制代码
-- 查询数据库中所有表的总行数
SELECT 
    'Total' AS TableName,  -- 返回固定的字符串 'Total' 来标识总行数
    SUM(p.rows) AS TotalRowCounts  -- 汇总所有表的行数
FROM 
    sys.tables t  -- 获取所有用户表
JOIN      
    sys.indexes i ON t.object_id = i.object_id  -- 连接索引视图
JOIN 
    sys.partitions p ON i.object_id = p.object_id AND i.index_id = p.index_id  -- 连接分区视图
WHERE 
    t.is_ms_shipped = 0  -- 排除系统表
    AND i.type <= 1;  -- 只计算堆表和聚集索引
结果:
  1. 每张表的行数:返回一个表格,显示每张表的名称和对应的行数(数据量)。
  2. 总行数:单独返回一个值,表示所有表的总行数。

这些查询可以帮助您快速评估数据库的大小和表的分布情况。

相关推荐
Elastic 中国社区官方博客20 分钟前
如何比较两个 Elasticsearch 索引并找出缺失的文档
大数据·运维·数据库·elasticsearch·搜索引擎
DLYSB_32 分钟前
生命通道:如何用 HIS 医疗系统直连网络声光终端,打造“零延误”的危急值响应网关?
java·网络·数据库·报警灯
儒雅的大叔40 分钟前
MySQL数据库InnoDB数据恢复工具使用总结
数据库·mysql·adb
观远数据1 小时前
ChatBI选型对比:从意图识别到SQL修复,六个维度打分决定是否值得投产
数据库·人工智能·sql
嘉&年华1 小时前
【第008篇】通过dexp和dimp命令导出和导入dmp文件(适用于达梦数据库)
数据库·sql
哥是强混3 小时前
Means:基于 .NET 10 打造的开源自部署 S3 兼容对象存储服务
网络·数据库·.net
ffqws_3 小时前
redis面试:如何保证双写一致
数据库·redis·缓存
水无痕simon3 小时前
6 数据库同义词
数据库
杜子不疼.4 小时前
【Qt初识】信号槽(三):机制意义、断开连接与 Lambda 表达式
开发语言·数据库·qt
BomanGe15 小时前
NSK W1501FA高速精密滚珠丝杠技术手册
数据库·经验分享·规格说明书