当前位置:   article > 正文

Mysql中关于NULL值的处理_mysql null

mysql null

一、Mysql空值介绍

MySQL认为任何和NULL值做比较的表达式的值都为NULL,包括select
null=null和select null!=null;
在这里插入图片描述
在这里插入图片描述
在对统计索引列不重复值的数量时如何对待NULL值,MySQL专门提供了一个innodb_stats_method的系统变量
官网文档参考:https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_stats_method

在这里插入图片描述

二、innodb_stats_method参数配置

这个系统变量有三个候选值:

nulls_equal:认为所有NULL值都是相等的。这个值也是innodb_stats_method的默认值。

如果某个索引列中NULL值特别多的话,这种统计方式会让优化器认为某个列中平均一个值重复次数特别多,所以倾向于不使用索引进行访问。

nulls_unequal:认为所有NULL值都是不相等的。

如果某个索引列中NULL值特别多的话,这种统计方式会让优化器认为某个列中平均一个值重复次数特别少,所以倾向于使用索引进行访问。

nulls_ignored:直接把NULL值忽略掉。

在MySQL5.7.22以后的版本,对这个innodb_stats_method的修改不起作用,MySQL把这个值在代码里写死为nulls_equal。

三、is null 和 not null对索引的影响

is null可能会走ref类型的索引访问,is not null是全表扫描。

  • is null则会区分被检索的列是否为null,如果是null则会走ref类型的索引访问,如果不为null,也是全表扫描。
  • is not null容易导致索引失效

四、null对count函数的影响

COUNT()是一个特殊的函数,有两种非常不同的作用:它可以统计某个列值的数量,也可以统计行数。

COUNT()的另一个作用是统计结果集的行数。常用的就是就是当我们使用COUNT(*)。实际上,它会忽略所有的列而直接统计所有的行数。

类似select count(columnName) 不会统计该字段值为null的行记录(除非明确要根据某个字段统计数量并且需要去除该字段的null值才可以使用,否则请使用select count(*)统计表行数)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/691425
推荐阅读
相关标签
  

闽ICP备14008679号