查询将返回每个表的名称和表中的数据行数(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; -- 按行数降序排列,最先显示数据量最大的表
说明:
sys.tables
: 这个视图包含了当前数据库中所有的表的信息。它有一个object_id
列,唯一标识每个表。