在MySQL中,null的性能和存储(空间)究竟是什么?
例如:
TINYINT:1字节TINYINT w/NULL 1字节+以某种方式存储NULL?
我只是进入一个项目,它有一个相当大的数据库后端.我已经开始挖掘这个数据库了,95%的字段都可以为空.
这是数据库世界中的常规做法吗?我只是一个卑微的程序员,而不是DBA,但我认为你想要将可空字段保持在最低限度,只有在它们有意义的地方.
如果大多数列可以为空,它是否是"代码味道"?
我们目前正在优化一个MySQL表(InnoDB),它甚至会有超过1亿行.
在一列中,我们存储IP地址(VARCHAR 45).我们需要在此列上放置一个索引,因为我们必须能够检索每个特定IP地址的所有行.
但是,所有行的70%不会存储IP地址(空).
我们的问题:我们应该将这些空值存储为NULL,从而在此列上允许NULL(将为每一行添加1个字节).或者我们不应该允许NULL并将那些空值存储为''(空字符串)?
什么是最佳表现?
我们永远不必搜索空(='')或空(IS NULL)的行,只搜索特定的IP地址(='123.456.789.123').
更新:在SO上确实有很多问题可以解决类似的问题.然而,一些答案似乎是矛盾的或说"它取决于".我们将运行一些测试并在此处针对我们的具体方案发布我们的发现.