V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
andybest
V2EX  ›  问与答

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

  •  
  •   andybest · 2015-04-08 08:29:13 +08:00 · 3537 次点击
    这是一个创建于 3522 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如存 1 万条 0 ,与存 1 万条 21 亿(Integer.MAX_VALUE),占用空间是否相同?
    为什么呢?
    8 条回复    2015-04-09 00:48:08 +08:00
    Septembers
        1
    Septembers  
       2015-04-08 08:32:44 +08:00 via Android   ❤️ 1
    换句话说Integer用二进制需要如何表达
    lichao
        2
    lichao  
       2015-04-08 08:32:51 +08:00   ❤️ 1
    都是 32 位二进制,占用空间自然一样
    Neveroldmilk
        3
    Neveroldmilk  
       2015-04-08 08:37:33 +08:00   ❤️ 1
    如果不压缩,容量是一样的。压缩了,就不一样了。
    andybest
        4
    andybest  
    OP
       2015-04-08 08:45:15 +08:00
    @Neveroldmilk 直接存在 InnoDB 表中,是压缩还是未压缩?

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

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

    这也就是char要比varchar快的原因。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5563 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 06:50 · PVG 14:50 · LAX 22:50 · JFK 01:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.