如何在SQL Server数据库中查找最大的对象?

jam*_*vey 130 database sql-server

我如何在SQL Server数据库中查找最大的对象?首先,通过确定哪些表(和相关索引)最大,然后确定特定表中哪些行最大(我们将二进制数据存储在BLOB中)?

有没有什么工具可以帮助进行这种数据库分析?或者是否有一些我可以对系统表运行的简单查询?

mar*_*c_s 269

我一直在使用这个SQL脚本(我从某人那里得到,某个地方 - 无法重建它来自哪个人)多年来它帮助我理解并确定了索引和表格的大小:

SELECT 
    t.name AS TableName,
    i.name as indexName,
    sum(p.rows) as RowCounts,
    sum(a.total_pages) as TotalPages, 
    sum(a.used_pages) as UsedPages, 
    sum(a.data_pages) as DataPages,
    (sum(a.total_pages) * 8) / 1024 as TotalSpaceMB, 
    (sum(a.used_pages) * 8) / 1024 as UsedSpaceMB, 
    (sum(a.data_pages) * 8) / 1024 as DataSpaceMB
FROM 
    sys.tables t
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
WHERE 
    t.name NOT LIKE 'dt%' AND
    i.object_id > 255 AND  
    i.index_id <= 1
GROUP BY 
    t.name, i.object_id, i.index_id, i.name 
ORDER BY 
    object_name(i.object_id) 
Run Code Online (Sandbox Code Playgroud)

当然,您可以使用其他订购标准,例如

ORDER BY SUM(p.rows) DESC
Run Code Online (Sandbox Code Playgroud)

获取具有最多行的表,或

ORDER BY SUM(a.total_pages) DESC
Run Code Online (Sandbox Code Playgroud)

获取使用最多页面(8K块)的表格.

  • 为此,您必须在该表上执行选择并为您感兴趣的每个字段打印出DATALENGTH(字段)(通常为VARCHAR(MAX),VARBINARY(MAX)等) (3认同)
  • 那一定是我见过的最漂亮的TSQL脚本 (2认同)
  • 要包含非CLUSTERED索引,请从WHERE子句中删除"和i.index_id <= 1". (2认同)

小智 68

在SQL Server 2008中,您还可以通过顶层表运行标准报告磁盘使用情况.右键单击数据库,选择"报告" - >"标准报告"并选择所需的报告即可找到此项.

  • 开玩笑吧?这是一个革命性的答案.谢谢你发布它.(不是讽刺.现在已经手动运行这些查询一段时间了,我不相信这些报告已经存在!) (6认同)

Vin*_*h_S 6

此查询有助于找到连接中最大的表。

SELECT  TOP 1 OBJECT_NAME(OBJECT_ID) TableName, st.row_count
FROM sys.dm_db_partition_stats st
WHERE index_id < 2
ORDER BY st.row_count DESC
Run Code Online (Sandbox Code Playgroud)