我们目前正在优化一个将最终拥有超过1亿条记录的MySQL表(InnoDB)。
在一列中,我们存储IP地址(VARCHAR 45),我们需要在此列上创建索引,因为我们必须能够检索每个特定IP地址的所有行。
70%的所有行,但是不会存储IP地址(为空)。
我们的问题:我们应该将这些空值存储为NULL,从而在此列上允许NULL(每行将增加1字节)。 还是不允许NULL并将这些空值存储为''(空字符串)?
对于性能来说哪种方式最好?
我们将永远不需要搜索为空的行(= '')或null(IS NULL),只搜索特定的IP地址(= '123.456.789.123')。
更新:确实有很多关于类似场景的SO问题。然而,一些答案似乎是矛盾的或者说“取决于情况”。我们将运行一些测试,并在此处发布我们的特定场景发现。