mysql 与空做比较_MySQL的NULL与空值的区别

MySQL中的NULL值实际上占用空间,每个NULL列需要额外的空间来记录是否为NULL。NOT NULL字段不允许插入NULL,而使用空字符串。NULL值在查询时会影响效率,因为索引不会存储NULL,可能导致索引效率下降。建议尽量避免使用NULL,用0或其他特殊值替代,以优化查询和索引性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

明确下面两个概念:

1、空值是不占用空间的

2、mysql中的NULL其实是占用空间的,下面是来自于MYSQL官方的解释

"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."

看以下例子:

mysql> select length('');+------------+

| length('') |

+------------+

| 0 |

+------------+

1 row in set (0.00sec)

mysql> select length(null);+--------------+

| length(null) |

+--------------+

| NULL |

+--------------+

1 row in set (0.00sec)

mysql> create tabletest(-> id int not null auto_increment primary key,-> val varchar(20) not null

-> )ENGINE=Myisam DEFAULT CHARSET=utf8;

Query OK,0rows affected

mysql> insert into test values(1,'');

Query OK,1row affected

mysql> insert into test value(2,null);1048 - Column 'val' cannot be nullmysql> insert into test (id) value (2);

Query OK,1 row affected

可见,NOT NULL 的字段是不能插入"NULL"的,只能插入"空值"。

NULL 其实并不是空值,而是要占用空间,所以mysql在进行比较的时候,NULL 会参与字段比较,所以对效率有一部分影响。而且B树索引时不会存储NULL值的,所以如果索引的字段可以为NULL,索引的效率会下降很多。

NULL的比较需要用特殊的运算符 is null,is not null,碰到其他运算符,一律返回null;当用select排除非空集合的数据时,也就理所当然的应该有两个条件,not null and <> ''。

注意:

MySQL 字段尽量避免NULL,应该指定列为NOT NULL,除非你想存储NULL。在MySQL中,含有空值的列很难进行查询优化,而且对表索引时不会存储NULL值的,所以如果索引的字段可以为 NULL,索引的效率会下降很多。因为它们使得索引、索引的统计信息以及比较运算更加复杂。你应该用0、一个特殊的值或者一个空串代替空值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值