看了很多博客,也听过很多人说,包括我们公司的DBA,说MySql中如果某一列中含有null,那么包含该列的索引就无效了。
翻了下《高性能MySQL第二版》和《MySQL技术内幕——InnoDB存储引擎第2版》,并没有看到关于这个的介绍。但在本地试了下,null列是可以用到索引的,不管是单列索引还是联合索引,但仅限于is null
,is not null
是不走索引的。
后来在官方文档中找到了说明,如果某列字段中包含null,确实是可以使用索引的,地址:https://dev.mysql.com/doc/refman/5.7/en/is-null-optimization.html。
在mysql5.6和5.7下均可,存储引擎为InnoDB。
数据如下:

mysql-null-data.png
1. 单列索引
给name
列建单列索引:

mysql-null-index1.png
查询name
为null
的行:

mysql-null-query1.png
查询name
为'test0'
或为null
的行:

mysql-null-query2.png
可以发现都可以用到索引。
2. 联合索引
给age和name添加联合索引:

mysql-null-index2.png
查询age
为14
并且name
为null
的行:

mysql-null-query3.png
可以发现同样用到了索引。
3. 其他
虽然MySQL可以在含有null的列上使用索引,但不代表null和其他数据在索引中是一样的。
不建议列上允许为空。最好限制not null
,并设置一个默认值,比如0
和''
空字符串等,如果是datetime类型,可以设置成'1970-01-01 00:00:00'
这样的特殊值。
对MySQL来说,null
是一个特殊的值,Conceptually, NULL means “a missing unknown value” and it is treated somewhat differently from other values
。比如:不能使用=,<,>
这样的运算符,对null
做算术运算的结果都是null
,count
时不会包括null
行等,null
比空字符串需要更多的存储空间等。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)