本次測試使用的數(shù)據(jù)庫版本為5.7.26
準(zhǔn)備測試的兩張表數(shù)據(jù)如下:
表a
CREATE TABLE `a_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`age` int(11) DEFAULT NULL,
`sex` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
INSERT INTO `a_user` (`id`, `name`, `age`, `sex`) VALUES ('1', 'tom', '20', '男');
INSERT INTO `a_user` (`id`, `name`, `age`, `sex`) VALUES ('2', 'bob', '40', '男');
INSERT INTO `a_user` (`id`, `name`, `age`, `sex`) VALUES ('3', 'lucy', '30', '女');
alter table a_user add index index_name(name(20));
表b
CREATE TABLE `b_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`sex` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
INSERT INTO `b_user` (`id`, `name`, `age`, `sex`) VALUES ('1', 'tom', '20', '男');
INSERT INTO `b_user` (`id`, `name`, `age`, `sex`) VALUES ('2', 'bob', '40', '男');
INSERT INTO `b_user` (`id`, `name`, `age`, `sex`) VALUES ('3', 'lucy', '30', '女');
alter table b_user add index index_name(name(20));
一纤虽、索引字段不為null
使用select *查詢
select * from a_user where name
is null;
select * from a_user where
name
is not null;
結(jié)果
select * from a_user where
name
is not null; 未使用索引商模;select * from a_user where
name
is null; 未使用索引樊诺;
查詢索引字段
select name from a_user where name
is null;
select name from a_user where name
is not null;
結(jié)果
select name from a_user where name
is null; 未使用索引;
select name from a_user where name
is not null; 使用索引布朦;
多字段查詢(索引字段+非索引字段)
select name,sex from a_user where name
is null;
select name,sex from a_user where name
is not null;
結(jié)果
select name,sex from a_user where name
is null;未使用索引煞烫;
select name,sex from a_user where name
is not null;未使用索引;
二猴鲫、索引字段為null 時
使用select *查詢
select * from b_user where name is null;
select * from b_user where name is not null;
結(jié)果:
select * from b_user where name is null;使用索引
select * from b_user where name is not null;未使用索引
查詢索引字段
select name from b_user where name is null;
select name from b_user where name is not null;
結(jié)果:
select name from b_user where name is null;使用索引
select name from b_user where name is not null;使用索引
多字段查詢(索引字段+非索引字段)
select name,sex from b_user where name is null;
select name,sex from b_user where name is not null;
結(jié)果:
select name,sex from b_user where name is null;使用索引
select name,sex from b_user where name is not null;未使用索引
總結(jié)以上測試:
1对人、當(dāng)索引字段不為null 時,只有使用is not null 返回的結(jié)果集中只包含索引字段時,才使用索引拂共;
2牺弄、當(dāng)索引字段為null時候,使用 is null 不影響覆蓋索引宜狐,但是使用 is not null 只有完全返回索引字段時才會使用索引