首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将列属性设置为NULL是否会影响表大小?

将列属性设置为NULL是否会影响表大小?
EN

Database Administration用户
提问于 2017-08-08 07:43:49
回答 2查看 612关注 0票数 3

我的MySQL数据库表中有一堆列,它们将布尔值(0或1)存储为丁点。默认情况下,它们是0,而不是null。我正在考虑将列属性设置为NULL,以便进行另一次验证检查,以防万一。不过,我不知道它是否会以增加这张桌子的尺寸为代价。我担心的是,也许,NULL属性会在每个数据输入中增加另一点?

我的数据库是新的,实际上是空的,所以当我试图检查表的大小时,它总是给我16 to。

EN

回答 2

Database Administration用户

回答已采纳

发布于 2017-08-08 15:26:33

来自MySQL文档 (重点雷):

如果可能,将列声明为NULL。它通过更好地使用索引和消除测试每个值是否为NULL的开销,使SQL操作更快。您还节省了一些存储空间,每列一位。如果表中确实需要空值,请使用它们。只需避免默认设置,该设置允许每个列中的空值。

因此,相反,NOT NULL节省了磁盘空间,而不是花费更多。

票数 6
EN

Database Administration用户

发布于 2017-08-16 19:42:43

你用的是哪台发动机?

最多,NULLs每8个可为空的列接受一个字节。在另一个方向上,NULL值可能占用的空间较少。你在说什么数据类型?

另见SET。这种数据类型允许您在最多8个字节的空间中放置多达64个布尔标志。

很久以前,我决定NULLNOT NULL的空间考虑是微不足道的,不值得花时间去思考它。我有一个经验法则:如果一个暂时的优化(NULL, etc)不会节省10%的东西(空间、速度等)),那么就放弃主题,寻找其他可以优化的东西。

相反,我专注于使用NOT NULL,除非我有业务原因或可以很好地利用NULL的处理逻辑:

  • 尚未确定(如死亡日期)
  • 可选(如中间首字母)
  • 不可用(如中间首字母)
  • 等。

在最初创建表时,我确实坚持仔细考虑数据类型。稍后进行模式更改是痛苦的。示例:

  • 这是否适合于2字节的SMALLINT而不是4字节的INT?(较小的磁盘空间并有助于加快速度)
  • 几乎所有的ints都可以/应该是UNSIGNED
  • 使CHARACTER SETCOLLATION正确。
  • NULLNOT NULL.(出于逻辑原因,而不是速度或空间)
  • 等。
票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/182924

复制
相关文章

相似问题

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