关于 mysql not in 是否走索引的问题

最近写代码的时候用到 not in 的查询语句,然后有大佬指出 not in 查询语句会进行扫表查询。然后网上搜了一波,看到有说走索引的,有说不走的。

这个时候就想起来之前说的explain性能分析工具了. 于是拿来测试一波

关于 explain 的使用介绍可以看这篇博客 数据库设计之冗余、索引以及查询优化

测试表结构如下

create table stu (
	id int,
	name varchar(64),
	primary key (id)
);

很简单的一张表, 然后使用 explain 测试 not in 的执行计划

explain select * from stu where id not in (1,2,3);

关于 mysql not in 是否走索引的问题_第1张图片
从返回结果中可以看到, type: ALL说明确实是进行了全表扫描,而没有使用索引。

其实这个也很好理解,因为要判断一条数据是否 not in 查询条件,只能查出来再判断。

然后写好的代码又得重新了,不过还好改动不多。
啊,要不是这个,我都快忘了explain了,以后写sql还是先用这个测一测吧。

你可能感兴趣的:(数据库)