我们目前正在优化一个MySQL表(InnoDB),它甚至会有超过1亿行.
在一列中,我们存储IP地址(VARCHAR 45).我们需要在此列上放置一个索引,因为我们必须能够检索每个特定IP地址的所有行.
但是,所有行的70%不会存储IP地址(空).
我们的问题:我们应该将这些空值存储为NULL,从而在此列上允许NULL(将为每一行添加1个字节).或者我们不应该允许NULL并将那些空值存储为''(空字符串)?
什么是最佳表现?
我们永远不必搜索空(='')或空(IS NULL)的行,只搜索特定的IP地址(='123.456.789.123').
更新:在SO上确实有很多问题可以解决类似的问题.然而,一些答案似乎是矛盾的或说"它取决于".我们将运行一些测试并在此处针对我们的具体方案发布我们的发现.