技术栈

主页 > 其他 >

从开发者角度谈Mysql(2):建议列设置为NOT NULL

技术栈 - 中国领先的IT技术门户

匠心零度 转载请注明原创出处,谢谢!

说在前面

在零度的地盘发了第一篇MySQL文章(从开发者角度谈Mysql(1):主键问题),这个系列主要从的开发角度出发,讲述一些结论性的内容。后续会跟大家一起学习,希望从更深层次聊一聊MySQL相关知识,比如索引、储存结构等等。

为什么建议列设置为NOT NULL

引用高性能MySQL中的一段话:

要尽可能地把字段定义为 NOT NULL。即使应用程序无须保存 NULL(没有值),也有许多表包含了可空列(Nullable Column),这仅仅是因为它为默认选项。除非真的要保存 NULL,否则就把列定义为 NOT NULL。

  • MySQL难以优化引用了可空列的查询,它会使索引、索引统计和值更加复杂。可空列需要更多的储存空间,还需要在MySQL内部进行特殊处理。当可空列被索引的时候,每条记录都需要一个额外的字节,还可能导致 MyISAM 中固定大小的索引(例如一个整数列上的索引)变成可变大小的索引。
  • 即使要在表中储存「没有值」的字段,还是有可能不使用 NULL 的。考虑使用 0、特殊值或空字符串来代替它。
  • 把 NULL 列改为 NOT NULL 带来的性能提升很小,所以除非确定它引入了问题,否则就不要把它当作优先的优化措施。然后,如果计划对列进行索引,就要尽量避免把它设置为可空。

结论

  • 在 MySQL 中,NULL 值与任何其它值比较(即使是 NULL)返回 false,即 NULL = NULL 返回false 。
  • 在 MySQL 中,处理 NULL 使用 IS NULL 和 IS NOT NULL 运算符。
  • 在需要使用唯一索引约束时,尽量全部采用非空字段,NULL在唯一索引中不产生冲突。。

如果读完觉得有收获的话,欢迎点赞、关注、加公众号【匠心零度】,查阅更多精彩历史!!!

责任编辑:admin  二维码分享:
本文标签: NULL索引MySQL可空列零度储存