andybest
V2EX  ›  问与答

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

  •  
  •   andybest · Apr 8, 2015 · 4090 views
    This topic created in 4079 days ago, the information mentioned may be changed or developed.
    比如存 1 万条 0 ,与存 1 万条 21 亿(Integer.MAX_VALUE),占用空间是否相同?
    为什么呢?
    8 replies    2015-04-09 00:48:08 +08:00
    Septembers
        1
    Septembers  
       Apr 8, 2015 via Android   ❤️ 1
    换句话说Integer用二进制需要如何表达
    lichao
        2
    lichao  
       Apr 8, 2015   ❤️ 1
    都是 32 位二进制,占用空间自然一样
    Neveroldmilk
        3
    Neveroldmilk  
       Apr 8, 2015   ❤️ 1
    如果不压缩,容量是一样的。压缩了,就不一样了。
    andybest
        4
    andybest  
    OP
       Apr 8, 2015
    @Neveroldmilk 直接存在 InnoDB 表中,是压缩还是未压缩?

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

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

    这也就是char要比varchar快的原因。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5556 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 06:53 · PVG 14:53 · LAX 23:53 · JFK 02:53
    ♥ Do have faith in what you're doing.