我的MySQL数据库表中有一堆列,它们将布尔值(0或1)存储为丁点。默认情况下,它们是0,而不是null。我正在考虑将列属性设置为NULL,以便进行另一次验证检查,以防万一。不过,我不知道它是否会以增加这张桌子的尺寸为代价。我担心的是,也许,NULL属性会在每个数据输入中增加另一点?
我的数据库是新的,实际上是空的,所以当我试图检查表的大小时,它总是给我16 to。
发布于 2017-08-08 15:26:33
来自MySQL文档 (重点雷):
如果可能,将列声明为NULL。它通过更好地使用索引和消除测试每个值是否为NULL的开销,使SQL操作更快。您还节省了一些存储空间,每列一位。如果表中确实需要空值,请使用它们。只需避免默认设置,该设置允许每个列中的空值。
因此,相反,NOT NULL节省了磁盘空间,而不是花费更多。
发布于 2017-08-16 19:42:43
你用的是哪台发动机?
最多,NULLs每8个可为空的列接受一个字节。在另一个方向上,NULL值可能占用的空间较少。你在说什么数据类型?
另见SET。这种数据类型允许您在最多8个字节的空间中放置多达64个布尔标志。
很久以前,我决定NULL和NOT NULL的空间考虑是微不足道的,不值得花时间去思考它。我有一个经验法则:如果一个暂时的优化(NULL, etc)不会节省10%的东西(空间、速度等)),那么就放弃主题,寻找其他可以优化的东西。
相反,我专注于使用NOT NULL,除非我有业务原因或可以很好地利用NULL的处理逻辑:
在最初创建表时,我确实坚持仔细考虑数据类型。稍后进行模式更改是痛苦的。示例:
SMALLINT而不是4字节的INT?(较小的磁盘空间并有助于加快速度)UNSIGNED。CHARACTER SET和COLLATION正确。NULL对NOT NULL.(出于逻辑原因,而不是速度或空间)https://dba.stackexchange.com/questions/182924
复制相似问题