您的位置:首页 > 数据库 > MySQL

mysql关于null值的使用

2017-11-27 20:45 218 查看
null值的处理是mysql经常被混淆的概念之一,也是查询中经常会犯迷糊的地方,做下简单整理以便日后查询:

自己理解的:

1:null值只能用is null ,is not null和ifnull()判断,不能进行任何比较运算,其他=,!=,in,not in...与null的比较都无任何数据返回

2:查询结果集中只有is null ,is not null会对列中的null做筛选,其他查询条件只对列中的非null值进行比较和过滤(此时此列中null值所在的行可以说不存在)

3:我们应该把null理解为一种特殊字符,它既不是空值('')也不是实值,它就是null

网上知识总结:

1:NULL值在与任何其他值甚至NULL值比较时总是假的(FALSE);

2:包含NULL的一个表达式总是产生一个NULL值;(SELECT NULL,1+NULL,CONCAT('Invisible',NULL);)

3:B树索引是不会存储NULL值的,所以如果索引的字段可以为NULL,索引的效率会下降很多

4:order by sname 或order by sname asc 时null显示在开头,order by sname desc时null显示在末尾

5:当使用GROUP BY时,所有的NULL值被认为是相等的(显示在开头)

6:null和''的区别
6.1:null和''是两个完全不同的概念,''代表有值(空),就是''.null代表值是未知的(在数据库表中null用特殊字符保存)
6.2:''(空值)不占用存储空间,null是一个特殊字符,占用空间(在数据库表中null用特殊字符保存)

7:比如 select count(*) 和 select count(id),后者是不计算NULL值的。

建议:
1:所有列都定义为not null(null值要占用内存,''不占用内存,所以把存储的null值用''替换掉可以提升查询效率)

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

参考博客:
http://blog.csdn.net/fwkjdaghappy1/article/details/7703974/ https://www.cnblogs.com/weiyi1314/p/6489236.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql null not null 索引