MySQL 中一个 int(11) 字段段存 0 与存 21 亿 占用的储存空间是一样的吗?

2015-04-08 08:29:13 +08:00
 andybest
比如存 1 万条 0 ,与存 1 万条 21 亿(Integer.MAX_VALUE),占用空间是否相同?
为什么呢?
3526 次点击
所在节点    问与答
8 条回复
Septembers
2015-04-08 08:32:44 +08:00
换句话说Integer用二进制需要如何表达
lichao
2015-04-08 08:32:51 +08:00
都是 32 位二进制,占用空间自然一样
Neveroldmilk
2015-04-08 08:37:33 +08:00
如果不压缩,容量是一样的。压缩了,就不一样了。
andybest
2015-04-08 08:45:15 +08:00
@Neveroldmilk 直接存在 InnoDB 表中,是压缩还是未压缩?

两者检索效率是否相同?比如 where xxx=1 与 where xxx=2100000000
mhycy
2015-04-08 08:52:41 +08:00
@andybest 检索效率与数据量\是否建立索引有关系,和数字大小没任何关系,都是int的情况下不可能牺牲检索效率去压缩这个数字,所以都是32bit的占位不会变.
Septembers
2015-04-08 08:53:08 +08:00
@andybest
具体场景具体论事 背景信息不足就不评论了
(Hash索引的话差不多O(N)
yangqi
2015-04-08 09:39:57 +08:00
int占用四个字节,是固定大小

https://dev.mysql.com/doc/refman/5.7/en/integer-types.html
lincanbin
2015-04-09 00:48:08 +08:00
是,否则的话,如果原来一个0被你Update成21亿,磁盘上的数据怎么处理?挪位置?性能会下降的。

这也就是char要比varchar快的原因。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/182248

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX