[数据库][sqlserver]sqlserver 查询表占用内存大小

SELECT 
    t.name AS TableName,
    s.name AS SchemaName,
    SUM(a.total_pages) * 8 / 1024 AS TotalSpaceMB,
    SUM(a.used_pages) * 8 / 1024 AS UsedSpaceMB,
    (SUM(a.total_pages) - SUM(a.used_pages)) * 8 / 1024 AS UnusedSpaceMB
FROM 
    sys.tables t
INNER JOIN 
    sys.schemas s ON t.schema_id = s.schema_id
INNER JOIN 
    sys.indexes i ON t.object_id = i.object_id
INNER JOIN 
    sys.partitions p ON i.object_id = p.object_id AND i.index_id = p.index_id
INNER JOIN 
    sys.allocation_units a ON p.partition_id = a.container_id
GROUP BY 
    t.name, s.name, p.rows
ORDER BY 
    TotalSpaceMB DESC;

这段SQL代码是一个查询语句,用于从数据库中检索表的名称、架构名称、总空间(以MB为单位)、已用空间(以MB为单位)和未使用空间(以MB为单位)。下面是对这段代码的逐行解释:

  1. SELECT:开始一个查询语句,选择要检索的列。

  2. t.name AS TableName:从sys.tables表中选择name列,并将其重命名为TableName

  3. s.name AS SchemaName:从sys.schemas表中选择name列,并将其重命名为SchemaName

  4. SUM(a.total_pages) * 8 / 1024 AS TotalSpaceMB:计算所有分配单元的total_pages总和,乘以8(因为每页8KB),然后除以1024(将KB转换为MB),并重命名为TotalSpaceMB

  5. SUM(a.used_pages) * 8 / 1024 AS UsedSpaceMB:计算所有分配单元的used_pages总和,乘以8,然后除以1024,重命名为UsedSpaceMB

  6. (SUM(a.total_pages) - SUM(a.used_pages)) * 8 / 1024 AS UnusedSpaceMB:计算总页数减去已用页数的差值,乘以8,然后除以1024,重命名为UnusedSpaceMB

  7. FROM sys.tables t:指定查询的主要表是sys.tables,别名为t

  8. INNER JOIN sys.schemas s ON t.schema_id = s.schema_id:通过schema_idsys.tables表与sys.schemas表进行内连接,以获取架构名称。

  9. INNER JOIN sys.indexes i ON t.object_id = i.object_id:通过object_idsys.tables表与sys.indexes表进行内连接,以获取索引信息。

  10. INNER JOIN sys.partitions p ON i.object_id = p.object_id AND i.index_id = p.index_id:通过object_idindex_idsys.indexes表与sys.partitions表进行内连接,以获取分区信息。

  11. INNER JOIN sys.allocation_units a ON p.partition_id = a.container_id:通过partition_idsys.partitions表与sys.allocation_units表进行内连接,以获取分配单元信息。

  12. GROUP BY t.name, s.name, p.rows:按表名、架构名和行数进行分组。

  13. ORDER BY TotalSpaceMB DESC:按TotalSpaceMB列的值降序排序结果

猜你喜欢

转载自blog.csdn.net/awonw/article/details/143305301