none
尽量不要允许NULL,除非必要,可以用NOT NULL+DEFAULT代替 RRS feed

  • 问题

  • 这个技巧知道,但是具体原因可能不太清楚.

    微软是否有官方的说法呢?

    多谢


    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.

    2012年4月24日 1:49

答案

  • 这个是要考虑场景的

    主要是从使用上考虑, NULL 的操作有一定的特殊性, NULL与任何值的计划结果均为NULL, 一般处理的时候, 如果忽略了这点, 那么就容易导致得到的结果与实际需要有差异

    而一般意识到这点的时候, 为了考虑 NULL值, 往往会用到 ISNULL(xx, 默认值) = xx 这样的处理判断, 这会导致性能受影响

    所以对于本来就不应该有 NULL 值, 或者在处理过程中, NULL值经常是某个默认值的情况, 是建议避免使用 NULL 的, 为了避免 NUL 值的存在, 为考虑使用 NOT NULL 约束, 或者使用默认值定义

    另外, NULL在存储上, 有一定的特殊性, 比如允许为NULL的字段,存储中会有一位用于表示字段值是否为NULL值, NOT NULL的字段没有这个( 2000及之前的版本与之后的版本在索引存储上, 对 NULL 的存储方式也差异比较大)

    2012年4月24日 3:03
  • NULL和Unknown是有其作用的,不过如果你不清楚怎么用NULL的话,还是不要用的好。

    性能上的原因楼上已经说了,不过其实只有一小点影响。我觉得最重要的原因是前端处理的时候容易出问题。


    想不想时已是想,不如不想都不想。

    2012年4月25日 9:47
    版主

全部回复

  • Not sure who told you that.
    2012年4月24日 1:50
  • 我在网上以及书上都有看到这个说法.

    你的意思是不一定成立?


    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.

    2012年4月24日 2:01
  • If it's that bad, it'll not be there.

    2012年4月24日 2:47
  • 这个是要考虑场景的

    主要是从使用上考虑, NULL 的操作有一定的特殊性, NULL与任何值的计划结果均为NULL, 一般处理的时候, 如果忽略了这点, 那么就容易导致得到的结果与实际需要有差异

    而一般意识到这点的时候, 为了考虑 NULL值, 往往会用到 ISNULL(xx, 默认值) = xx 这样的处理判断, 这会导致性能受影响

    所以对于本来就不应该有 NULL 值, 或者在处理过程中, NULL值经常是某个默认值的情况, 是建议避免使用 NULL 的, 为了避免 NUL 值的存在, 为考虑使用 NOT NULL 约束, 或者使用默认值定义

    另外, NULL在存储上, 有一定的特殊性, 比如允许为NULL的字段,存储中会有一位用于表示字段值是否为NULL值, NOT NULL的字段没有这个( 2000及之前的版本与之后的版本在索引存储上, 对 NULL 的存储方式也差异比较大)

    2012年4月24日 3:03
  • 关于Null的使用,我这里有一段译自《Microsoft SQL Server 2008 internal》的文章,也许对你有帮助。

    http://www.cnblogs.com/downmoon/archive/2010/01/23/1654779.html

    另外,SQL Server 2008起,提供了Sparse Column(稀疏列)来对某一个大部分为Null的列进行存储上的优化。可以看看:
    http://msdn.microsoft.com/zh-cn/library/cc280604.aspx


    助人等于自助。3w@live.cn


    2012年4月25日 6:26
  • NULL和Unknown是有其作用的,不过如果你不清楚怎么用NULL的话,还是不要用的好。

    性能上的原因楼上已经说了,不过其实只有一小点影响。我觉得最重要的原因是前端处理的时候容易出问题。


    想不想时已是想,不如不想都不想。

    2012年4月25日 9:47
    版主