最近,我一直在考虑是否值得拥有一个表可能有很多NULL列,或者如果有更多表没有NULL则更好。我听说过InnoDB上没有存储NULL,所以我想知道是否存在任何有很多NULL的行的缺点或问题。我一直听说常见的NULL很糟糕,但我从未真正了解过原因。顺便说一句,如果重要的话,外键上的那些将是NULL。
第二个疑问,当我在有很多NULL的列上使用INNER JOIN时是否有任何性能问题?就像,如果我有4个外键,并且我要做4个INNER JOIN,但很可能只有1个不是NULL,这是否会影响性能?感谢
答案 0 :(得分:6)
请参阅:
将NULL编入索引。
在InnoDB中,您可以使用NULL来降低数据行的存储要求。
答案 1 :(得分:2)
在Baron Schwartz,Peter Zaitsev,Vadim Tkachenko,Jeremy Zawodny,Arjen Lentz和Derek J. Balling所着的高性能MySQL:优化,备份,复制等一书中,它说表允许NULL的列使MySQL更难以优化引用可空列的查询。当索引可空列时,每个条目需要一个额外的字节,并且可以在MyISAM中将固定大小的索引(例如单个整数列上的索引)转换为可变大小的索引。他们说当列需要携带缺失值时,使用0表示整数,使用特殊字符或空字符串。尽可能避免使用NULL和NOT NULL。