gpt4 book ai didi

sql-server - 使用sql server计算表中单行的物理大小

转载 作者:行者123 更新时间:2023-12-02 04:29:06 25 4
gpt4 key购买 nike

我正在创建一个应用程序以在数据库中提供有限的空间作为 gmail 帐户。我想根据客户的数据存储空间向客户收费。我用谷歌搜索但没有找到合适的解决方案。

我想计算数据库中不同表中特定 ID 的单行的物理大小(硬盘空间)。我正在使用 sql server。

举个例子来理解这一点:

我们都使用 gmail,服务器上的邮件存储空间有限,只有 5GB。当我们超过存储空间的限制时,我们必须从我们的帐户中删除一些数据以获得可用空间(也用于硬盘)。

根据我的想法,gmail 可能有一些不同的功能,但我需要这个。

注意:这篇文章可能会重复/重复。欢迎您坦诚提问。

谢谢

最佳答案

我以前遇到过这个问题,我找到的最佳解决方案是找出表的总大小(包括索引)并将其除以它的行数。如果您的表表示的实体的数据长度与均值没有很大偏差(我就是这种情况),并且您还有足够的行和数据来表示真实案例,那么这将很有用。

查看表使用的大小的查询:

SELECT 
TableName = t.NAME,
SchemaName = s.Name,
[RowCount] = p.rows,
TotalSpaceMB = CONVERT(DECIMAL(18,2), SUM(a.total_pages) * 8 / 1024.0),
UsedSpaceMB = CONVERT(DECIMAL(18,2), SUM(a.used_pages) * 8 / 1024.0),
UnusedSpaceMB = CONVERT(DECIMAL(18,2), (SUM(a.total_pages) - SUM(a.used_pages)) * 8 / 1024.0)
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
LEFT OUTER JOIN sys.schemas s ON t.schema_id = s.schema_id
WHERE
t.NAME NOT LIKE 'dt%'
AND t.is_ms_shipped = 0
AND i.OBJECT_ID > 255
GROUP BY
t.Name,
s.Name,
p.Rows
ORDER BY
TotalSpaceMB DESC

然后您可以将 UsedSpaceMB 除以 RowCount 以获得平均大小。

关于sql-server - 使用sql server计算表中单行的物理大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24532110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com