首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataLength值的和与表大小不匹配

DataLength值的和与表大小不匹配
EN

Stack Overflow用户
提问于 2017-05-24 16:05:46
回答 1查看 317关注 0票数 1

我试图找出表中哪些用户记录占用的空间最大。为此,我在SqlServer中使用了SqlServer函数。

代码语言:javascript
复制
SELECT 
    UserName, 
    SUM(
        ISNULL(DATALENGTH(columnA), 1) +
        ISNULL(DATALENGTH(columnB), 1) +
        ....
        ISNULL(DATALENGTH(columnZ), 1) +
        )/1000000 AS SizeInMegaBytes
FROM MyTable
GROUP BY UserName
ORDER BY SizeInMegaBytes DESC

结果:

代码语言:javascript
复制
+----------+-----------------+
| UserName | SizeInMegaBytes |
+----------+-----------------+
|   User1  |       1700      |
+----------+-----------------+
|   User2  |       1504      |
+----------+-----------------+
|   ....   |       ....      |
+----------+-----------------+
|  User75  |        20       |
+----------+-----------------+

总尺寸= 16,523 MB

唯一的问题是结果与表的大小不匹配。我使用内置存储过程来获取表的大小。

代码语言:javascript
复制
sp_spaceused [MyTable]

结果:

代码语言:javascript
复制
+---------+-------+-------------+-------------+------------+-------------+
| name    | rows  | reserved    | data        | index_size | unused      |
+---------+-------+-------------+-------------+------------+-------------+
| MyTable | 61477 | 59425416 KB | 42482152 KB | 62584 KB   | 16880680 KB |
+---------+-------+-------------+-------------+------------+-------------+

存储过程将总数据大小显示为42 GB,而对所有列的查询显示16 GB。如果我已经考虑了所有列的大小,又会占用多少额外的空间呢?

编辑-我不认为我的问题是相同的重复提到,因为在这里,我采取的所有分组记录的SUM,而前面的问题没有。DataLength函数的和与sp_spaceused的结果(29 GB)之间似乎有很大的差距,我认为它不能仅由索引或头信息来解释。

EN

回答 1

Stack Overflow用户

发布于 2017-05-24 16:13:13

首先,您的数学是可疑的;1MB = (1KB * 1KB) = 1024B * 1024B

第二,可能存在与表和记录相关的元数据。检查表的定义可以在这里提供洞察力。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44163475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档