在Mysql中很多表都包含可为NULL(空值)的列,即使应用程序并不需要保存NULL也是如此,这是因为可为NULL是列的默认属性。但我们常在一些Mysql性能优化的书或者一些博客中看到观点:在数据列中,尽量不要用NULL 值,使用0,-1或者其他特殊标识替换NULL值,除非真的需要存储NULL值,那到底是为什么?如果替换了会有什么好处?同时又有什么问题呢?那么就看下面:

  • (1)如果查询中包含可为NULL的列,对Mysql来说更难优化,因为可为NULL的列使得索引,索引统计和值比较都更复杂。
  • (2)含NULL复合索引无效.
  • (3)可为NULL的列会使用更多的存储空间,在Mysql中也需要特殊处理。
  • (4)当可为NULL的列被索引时,每个索引记录需要一个额外的字节,在MyISAM里甚至还可能导致固定大小的索引(例如只有一个整数列的索引)变成可变大小的索引。

通常把可为NULL的列改为NOT NULL 带来的性能提升比较小,所以(调优时)没有必要首先在现有schema中查找并修改掉这种情况,除非确定这会导致问题。但是,如果计划在列上建索引,就应该尽量避免设计成可为NULL的列。

当确实需要标识未知值时也不要害怕使用NULL。在一些场景中,使用NULL可能会比某个神奇常数更好。从特定类型的值域中选择一个不可能的值,例如用-1代表一个未知数,可能导致代码复杂的多,并容易引入BUG,还可能让事情变得一团糟(注:Mysql会在索引中存储NULL值,Oracle不会)。

当然也有例外,InnoDB使用单独的位(bit)来存储NULL值,所以对于稀疏数据(很多值位NULL,只有少数行的列有非NULL值)由很好的空间效率,这一点不适用于MyISAM。

所以任何的设计和考虑请注意关注实际需求

为什么Mysql 数据库尽量避免NULL?相关推荐

  1. mysql 不要统计null_浅谈为什么Mysql数据库尽量避免NULL

    在Mysql中很多表都包含可为NULL(空值)的列,即使应用程序并不需要保存NULL也是如此,这是因为可为NULL是列的默认属性.但我们常在一些Mysql性能优化的书或者一些博客中看到观点:在数据列中 ...

  2. mysql数据库内NOT NULL_浅谈为什么Mysql数据库尽量避免NULL

    在Mysql中很多表都包含可为NULL(空值)的列,即使应用程序并不需要保存NULL也是如此,这是因为可为NULL是列的默认属性.但我们常在一些Mysql性能优化的书或者一些博客中看到观点:在数据列中 ...

  3. 下列有关mysql数据库中的null值_MySQL数据库中与 NULL值有关的问题

    对于SQL的新手,NULL值的概念常常会造成混淆,他们常认为NULL是与空字符串"相同的事.情况并非如此.例如,下述语句是完全不同的: mysql> INSERT INTO my_ta ...

  4. 数据基础---mysql数据库操作(一)---基础操作

    mysql常识 本文前面主要是对<mysql_5.5中文参考手册>部分内容的整理. 说明:登录mysql后,可以看到mysql> 的提示符,可以输入相关命令:输入命令后,需要以&qu ...

  5. Mysql的空值与NULL的区别

    Mysql数据库是一个基于结构化数据的开源数据库.SQL语句是MySQL数据库中核心语言.不过在MySQL数据库中执行SQL语句,需要小心两个陷阱. 陷阱一:空值不一定为空 空值是一个比较特殊的字段. ...

  6. mysql数据库的远程访问_mysql数据库远程访问设置方法

    mysql数据库远程访问设置方法 myeclipse连接mysql数据库错误示例: null, message from server: "Host '127.0.0.1' is not a ...

  7. mysql中数据表null什么意思_MySQL 中NULL和空值的区别是什么?

    展开全部 空值是不占用空间的,MySQL中的NULL其实是占用空间的. 不过在MySQL数据库中执行62616964757a686964616fe78988e69d8331333363396466SQ ...

  8. 简单的Java连接MySQL数据库

    简单的Java连接MySQL数据库 最近需要用到Java连接MySQL数据库 Connection conn = null; Statement stmt = null; try {// 连接数据库C ...

  9. Mysql 数据库默认值选 ‘‘“ 、Null和Empty String的区别

    Mysql 数据库默认值选 ''" .Null和Empty String的区别 1:空值('')是不占用空间的 2: MySQL中的NULL其实是占用空间的.官方文档说明: "NU ...

  10. [记录]---mysql数据库,decimal类型设置默认值0,不要是null

    mysql数据库 类型为decimal的字段,最好把默认值设置为0,不要设置为null. 因为null值在代码中及其容易造成空指针.

最新文章

  1. 面试官三连问:你这个数据量多大?分库分表怎么做?用的哪个组件?
  2. 汽车之家店铺数据抓取 DotnetSpider实战[一]
  3. 到了姥姥家我在小点点c++
  4. 五周第二次课(4月19日)
  5. Ubuntu 18.04 rc.local systemd设置
  6. String:基本实现
  7. 在Ubuntu中下载github上的文件
  8. 大学竞赛经历分享之微信小程序应用开发赛(1)
  9. 计算思维-卡内基梅隆大学计算机系主任周以真
  10. android hls检测,安卓大部分浏览器播放HLS协议直播流会从头开始
  11. 为什么蓝牙电子产品要做BQB认证
  12. Python海龟绘图,画花朵
  13. Servlet_Jsp学习笔记:
  14. 【OpenCV】01-OpenCV的数据类型
  15. vc 打开文件对话框获取选择文件路径
  16. 如何白手起家挣到一百万?
  17. springboot启动和关闭时的事件操作:
  18. 2.《一个物联网系统的实现》之 EMQX 配置
  19. linux去除字符串的空格符,Shell中去除字符串前后空格的方法
  20. 企业常用的几个人力资源管理系统功能!

热门文章

  1. 从《美丽心灵》到《纳什博弈论》
  2. (二)Pyside2 + QtDesigner 图片插入
  3. 小白的opencv学习笔记v2.0
  4. 5000元高端投影仪双十一怎么选?极米H6 4K高亮定焦版成为首选
  5. 关于RTOS中信号量、互斥量、邮箱、消息队列的一些理解
  6. c语言程序设计报告评语,c语言报告组长评语
  7. uniapp如何实现上拉加载(uniapp懒加载)?其实简简单单
  8. 北京野趣水库烧烤好去处882
  9. js实现无限层级树形数据结构(创新算法)
  10. 网页字体更清晰的css用什么?