[原创]INNODB中NULL字段使用

在大多数情况下字段设计应该避免使用default null的使用,而使用空字符来代表空。
因为INNODB的索引中会存储NULL,如果一个字段可为NULL,并且在该字段上有索引,索引中会存储NULL,每次索引的时候会额外扫更多的字段。
同时对于可以为NULL的列,MySQL优化器的工作会更复杂。
尽量不使用NULL,但在需要使用NULL的时候也不要害怕使用NULL。
这句话很难把握,实践中一般有以下情况。
timestamp类型 在not null的时候,必须指定一个符合timestamp的默认值,存任何可选的值都会造成描述的不准确,可能在使用中引起不必要的麻烦。
datatime类型 同上,不一样的是在MySQL设置中通常禁止了不合法的时间范围,可选的范围会更小,引发错误的机会会更大。
非索引字段绝大部分内容为空,在INNODB中NULL为1bit,这样可以让表空间拥有更好的空间效率。
在需要使用唯一索引约束一个字段,但是需要部分字段为空时,空字符串会引起唯一索引冲突,NULL可以在唯一索引中不产生冲突。

留言

comments powered by Disqus

Previous topic

[原创]MySQL在用户标识字段、状态字段操作的问题

Next topic

[原创]INNODB前缀索引、索引长度