当我有一个表,其中有时只填充两个字段在行中创建大量NULL值时,不确定处理NULL值的最佳实践是什么.
是否应将这两个字段移动到一个单独的表中,创建两个没有NULL值的表?
跨这两个表的连接只会返回一个与我的原始表等于NULL的结果,那么它的重点是什么?
似乎没有意义将它们分开,但我已经阅读了一些关于在db中一起避免null的事情.
欢迎任何想法.
解决方法
>纯理论上,NULL应该表示“未知值”.所以 – 再次,纯粹理论上 – 你应该在规范化时设计你的表,这样你就不需要填写NULL值来表示“不适用于这一行”.但是,这一点与任何实际考虑(设计,性能或查询可读性)几乎没有关系.
>实际上,有一些性能考虑因素.在以下情况下,您应该将非常稀疏的数据标准化:
>实际上,有一些性能考虑因素.在以下情况下,您应该将非常稀疏的数据标准化:
>缩短表格(IO方式和/或空间方式)都有实质性的好处. NULL占用空间,行越宽,性能越差.当表有很多行并且有许多这样的稀疏列时尤其如此.对于只有2个这样的列的小型表,实现的好处可能不值得额外加入的麻烦.>您的查询在WHERE子句中包含相关列. IIRC,查询严重空的列是相当低效的.>另一方面,在某些时候,在查询中有额外的连接可能会损害优化器的性能(至少一旦你的连接有10个表就会这样做 – 从优化器运行时占用cpu资源到实际混淆优化器选一个非常糟糕的计划).解决方案是避免由于规范化而导致表太多(例如,不要将2列拆分成单独的表),或者强制执行查询计划.后者显然是Bad Juju.