美文网首页
在MySQL中is null, is not null对索引的影

在MySQL中is null, is not null对索引的影

作者: Ppnn13Yu | 来源:发表于2019-12-26 16:42 被阅读0次
本次测试使用的数据库版本为5.7.26
image.png
准备测试的两张表数据如下:
 表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;

image.png
select * from a_user where name is not null; image.png
结果
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;

image.png

select name from a_user where name is not null;

image.png

结果
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;

image.png

select name,sex from a_user where name is not null;

image.png

结果
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;


image.png

select * from b_user where name is not null;


image.png

结果:
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;


image.png

select name from b_user where name is not null;


image.png

结果:
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;


image.png

select name,sex from b_user where name is not null;


image.png

结果:
select name,sex from b_user where name is null;使用索引
select name,sex from b_user where name is not null;未使用索引

总结以上测试:
1、当索引字段不为null 时,只有使用is not null 返回的结果集中只包含索引字段时,才使用索引;
2、当索引字段为null时候,使用 is null 不影响覆盖索引,但是使用 is not null 只有完全返回索引字段时才会使用索引

相关文章

  • 在MySQL中is null, is not null对索引的影

    本次测试使用的数据库版本为5.7.26 准备测试的两张表数据如下: 一、索引字段不为null使用select *查...

  • MySQL索引失效的几种情况

    MySQL索引失效的几种情况 1.索引无法存储null值 a.单列索引无法储null值,复合索引无法储全为null...

  • MySQL中NULL对索引的影响

    看了很多博客,也听过很多人说,包括我们公司的DBA,说MySql中如果某一列中含有null,那么包含该列的索引就无...

  • mysql的唯一索引字段可以为null吗

    在sql server中,唯一索引字段不能出现多个null值 在mysql 的innodb引擎中,是允许在唯一索引...

  • mysql进阶--数据类型使用上的建议

    1 使用 NOT NULL,且带有 COMMENT 这个建议适用于所有的数据类型,MySQL 在索引值为 NULL...

  • sqoop:导出MySQL数据至Hive时,Null值处理

    Hive中的Null在底层是以“\N”来存储,而MySQL中的Null在底层就是Null,直接导入Hive会把nu...

  • 数据库

    • MySQL 索引使用的注意事项 MySQL 索引使用的注意事项 索引不会包含有NULL值的列使用短索引...

  • index-2

    只要列中包含NULL值是不会在索引数据中;复合索引中某一列包含NULL 的值,那该列在复合索引中是无效的。所以在建...

  • 这些不走索引的SQL

    使用索引时,有一些技巧:1.索引不会包含有NULL的列只要列中包含有NULL值,都将不会被包含在索引中,复合索引中...

  • Mysql 索引失效

    1.索引无法存储null值 a.单列索引无法储null值,复合索引无法储全为null的值。b.查询时,采用is n...

网友评论

      本文标题:在MySQL中is null, is not null对索引的影

      本文链接:https://www.haomeiwen.com/subject/dlqloctx.html