gpt4 book ai didi

mysql - 奇怪的 MySQL 表大小

转载 作者:可可西里 更新时间:2023-11-01 08:07:26 26 4
gpt4 key购买 nike

我主要使用这三个表在 MySQL 中实现倒排索引:

WORDS (word_id, word)
INSTANCES (word_id, doc_id)
DOCUMENT (id, text)

其中 word_idINTdoc_idBIGINT

然后,我尝试将 WORDS 和 INSTANCES 表反规范化为一个表:

INSTANCES_NEW (word, doc_id)

word 现在是 VARCHAR(50)doc_idBIGINT

表 INSTANCES 和 INSTANCES_NEW 都有,word_id/worddoc_id 的两个索引。对于相同的数据,INSTANCES 显示为占用 146MB,而 INSTANCES_NEW 显示为占用 122.7MB。 INT 怎么会比 VARCHAR(50) 占用更多的空间?几乎所有单词都至少需要 3 个字符 - 因此理论上所占用的空间应该增加一倍以上。

最佳答案

不知道您的数据是很困难的,但您的索引的大小可能存在差异。正如您所说,这些表有不同的索引……对于第一个表,您在 word_id/word 上有索引,而第二个表在 word/doc_id 上有索引。所以你的索引有不同数量的条目,而且很可能有不同的大小。你可以执行 SHOW TABLE STATUS获得更好的想法(并可能将其张贴在这里,以便我们一起分析)。

编辑:因此,您的结果是:

实例

总行数:1348741

平均行长:40B

数据:52.57MB

索引:93.20MB

总计:145.77MB

instances_new

总行数:1383266

平均行长:42B

数据:56.57MB

索引:66.14MB

总计:122.71MB

如您所见,实例表的索引 (99.2MB) 比第二种情况 (66.14MB) 大得多,而数据大小几乎相同。因此,正如我所想,大小差异来自索引大小,而数据大小的这种微小差异可以用行数(大约)的微小差异来解释

关于mysql - 奇怪的 MySQL 表大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8793618/

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