mysql数据库内NOT NULL_MySQL数据库的表中 NULL 和 空值 到底有什么区别呢?

Mysql 5.7.29

首先我们建立一个表

表的一个字段default空字符串,一个字段default null

a4c39e4aeaa4caaf073a703971199bdc.png

接下来我们往数据库插入10条数据,下面的SQL执行10次,那么我们会得到下面的数据

23536cae64086f0c61e56f4abb542164.png

77242876ace7399352e64027ae16883a.png

那么,下面这两条语句会走索引吗

explain select id, configuration, description from t_my_jvm2 where configuration = '2' ;

explain select id, configuration, description from t_my_jvm2 where description = '描述' ;

复制代码

是否走索引

根据查看执行计划的key列,你会得到这样的答案,上面那条不走索引,下面那条走索引

这很令人吃惊,为什么第一条不走索引呢????

我们接下来修改一下数据。

7b98521af88f5c063c93e994f2ea8ade.png

删除configuration的5条数据,往description添加5条数据

我们再来查一次

发现两列数据,都走索引了

我们再来试验一个东西,两列数据都增加一行数据

d1273893147f24d4ecfbf4770685e054.png

再测试一次,发现都不走索引了

小推测

所以我们简单的推测一下,

# configuration = '2' 当空串''的数量,小于等于40%的时候(10条有4条及以下),不会走索引

# configuration = '2' 当空串''的数量,大于40%的时候(10条有4条以上),走索引

# description = '描述' 当null的数量,小于等于40%的时候(10条有4条及以下),不会走索引

# description = '描述' 当null的数量,大于40%的时候(10条有4条以上),会走索引

复制代码

测试 is null 和 is not null

我们接下来看一下 is null 和 is not null

我们先把数据恢复

77242876ace7399352e64027ae16883a.png

执行下面两条语句

explain select id, configuration, description from t_my_jvm2 where description is null ;

explain select id, configuration, description from t_my_jvm2 where description is not null ;

复制代码

结果是,上面的 is null 语句,不走索引,下面的 is not null 语句走索引

我们先测试 is null,我们来修改一下数据

13fa6d756597b561b78b32281af91b18.png

再执行一次,is null,仍然不会走索引

我们再次修改一下数据

913b5cc6238e8aeb0765cf47aef441a1.png

再执行一次,is null,发现走索引了

与此同时,我们执行一下,is not null,发现不走索引

我们修改一下数据,

21470bbd2cea2cf9220fc5c8a7ed1638.png

再执行一次,is not null,发现还是不走索引

再修改一下数据

2c030b60143b724926e8842e5d983084.png

再执行一次,is not null,发现走索引了

总结

# configuration = '2' 当空串''的数量,小于等于40%的时候(10条有4条及以下),不会走索引

# configuration = '2' 当空串''的数量,大于40%的时候(10条有4条以上),会走索引

# is null 当null的数量,小于等于40%的时候(10条有4条及以下),不会走索引

# is null 当null的数量,大于40%的时候(10条有4条以上),会走索引

复制代码

# is not null 当null的数量,小于等于30%的时候(10条有3条及以下),会走索引

# is not null 当null的数量,大于30%的时候(10条有3条以上),不会走索引

# description = '描述' 当null的数量,小于等于40%的时候(10条有4条及以下),不会走索引

# description = '描述' 当null的数量,大于40%的时候(10条有4条以上),会走索引

复制代码

最后

1,走过路过记得点赞啊,盆友们

2,掘金的markdown编辑器真难用,比不上typora,连CSDN都比不上,虽然一个网站内容是最重要的,但是写作环境这么差,谁写啊!!!!!!!!!!吐槽!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值