MSSQL统计各表占用的空间大小

该SQL查询用于获取数据库中每个表的详细存储信息,包括数据占用、已使用和未使用的空间,以及行数。它通过sys.sysindexes视图获取信息,并按预留空间大小降序排列结果。

SELECT  OBJECT_NAME(id) tablename ,
        CASE WHEN reserved * 8 > 1024 THEN RTRIM(8 * reserved / 1024) + 'MB'
             ELSE RTRIM(reserved * 8) + 'KB'
        END DataReserve ,
        CASE WHEN dpages * 8 > 1024 THEN RTRIM(8 * dpages / 1024) + 'MB'
             ELSE RTRIM(dpages * 8) + 'KB'
        END Used ,
        CASE WHEN 8 * ( reserved - dpages ) > 1024
             THEN RTRIM(8 * ( reserved - dpages ) / 1024) + 'MB'
             ELSE RTRIM(8 * ( reserved - dpages )) + 'KB'
        END unused ,
        CASE WHEN ( 8 * dpages / 1024 - rows / 1024 * minlen / 1024 ) > 1024
             THEN RTRIM(( 8 * dpages / 1024 - rows / 1024 * minlen / 1024 )
                        / 1024) + 'MB'
             ELSE RTRIM(( 8 * dpages / 1024 - rows / 1024 * minlen / 1024 ))
                  + 'KB'
        END FREE ,
        rows AS Rows_Count
FROM    sys.sysindexes
WHERE   indid = 1
        AND status = 2066 -- status='18'
ORDER BY reserved DESC

在MySQL中,直接统计所有的总大小可能会比较复杂,因为MySQL并没有提供一个内置函数可以直接获取这个信息。不过,你可以通过一些组合查询和系统来估算。以下是一个示例脚本,它将遍历所有的数据并计算它们的总空间占用: ```sql SET @table_name = ''; SET @sql = 'SELECT (Data_length + Index_length) AS TotalSize, table_name FROM information_schema.tables t WHERE table_schema = DATABASE() AND table_type = ''BASE TABLE'' AND table_name != ''information_schema``'; WHILE (@table_name IS NOT NULL) BEGIN SET @table_name = (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME > @table_name AND TABLE_TYPE = 'BASE TABLE'); IF (@table_name IS NOT NULL) THEN SET @sql = CONCAT(@sql, ', (Data_length + Index_length) AS `TotalSize_', @table_name, '`, table_name = ?', @table_name); END IF; END; PREPARE stmt FROM @sql; EXECUTE stmt; ``` 这段脚本首先设置了一个循环,从`information_schema.tables`开始查找当前数据库中的下一个名,然后在循环体中拼接SQL,每次添加一个新的名到统计列中。最后,执行这个动态生成的SQL来获取每个的总大小。 注意,这个方法可能不是完全准确的,因为它可能无法考虑到视图、存储过程等非基础大小,并且在大数据库中可能效率较低。如果你需要精确的数据,可能需要单独处理这类特殊的或者依赖于数据库管理系统特定的功能。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值