有很多人对null值是否走索引感觉很疑惑,这个也要结合那个版本什么引擎来确定,我们现在mysql5.7存储引擎InnoDB(因为这个是当前主流mysql版本)下来做个测试,看看到底情况如何?
开始进行试:
创建表
CREATETABLE`a`(
`id`int(11)NOTNULLAUTO_INCREMENT,
`name`varchar(45)DEFAULTNULL,
`dd`int(11)DEFAULTNULL,
PRIMARYKEY(`id`),
KEY`name`(`name`)
)
插入数据
insertintoa(name)selectnull
多次执行下面语句,将数据量达到十几万级别(数据太少不走索引)
insertintoa(name)
selectuuid_short()froma
执行sql
SELECT*FROMa
wherename=;
执行sql
SELECT*FROMa
wherenameisnull;
结论:
在mysql5.7存储引擎为InnoDB中,我们看到两个sql都是走索引的,并不会因为isnull而不走索引,所以字段为null并不会影响sql走索引。
首先还是建议无论索引列还是其他列,都设置成非null,通过默认值解决null值问题。如果把索引列一些值设置为null,也是允许的,但是写sql时候就要用到isnull和isnotnull来进行筛选数据,这仅仅是语法的需要适配,但并不影响正确的走索引。