mysql查询空值和null_MySQL为什么要设置NOT NULL?

什么?你没有设置not null?赶紧准备准备跑路吧,同事开玩笑的说,幸好没有上线到正式啊......

d142370893c5d5c1c7873ce4e5fe14e7.png

正文

平时我们开发经常会看到一些这样的SQL语句:

`name` varchar(30) NOT NULL DEFAULT '' COMMENT '名称',`nickname` varchar(30) NOT NULL DEFAULT '' COMMENT '昵称',`address` varchar(50) NOT NULL DEFAULT '' COMMENT '地址',

为什么会这样设置呢?同事看着前辈的代码若有所思,具体是什么原因呢?

1、占用空间区别

咱们先看看这条SQL:

8473757489b13f300ff7e5d5032e2d7f.png

可以看出空值('')的长度是0,是不占用空间的;而的NULL长度是NULL,其实它是占用空间的,占用空间的原因查了一下原因:

NULL columns require additional space in the row to record whether their values are NULL. For MyISAM tables, each NULL column takes one bit extra, rounded up to the nearest byte.

NULL列需要行中的额外空间来记录它们的值是否为NULL。

2、不利于查询优化

如果查询中包含可为NULL的列,对MySQL来说更难优化,因为可为NULL的列会使索引、索引统计和值比较都更复杂。

当可为NULL的列被索引时,每个索引记录需要一个额外的字节,在MyISAM里面甚至可能导致固定大小的索引(例如只有一个整数列的索引)变成可变大小的索引。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值