为什么Mysql解释为下面的SQL语句使用索引而不是范围
我有一张桌子:为什么Mysql解释为下面的SQL语句使用索引而不是范围,mysql,Mysql,我有一张桌子: create table user ( id int primary key, name varchar(20) )engine=innodb; insert into user values(1,'lily'); insert into user values(2,'tom'); insert into user values(3,'bob'); insert into user values(4,'jimi'); insert into user values
create table user (
id int primary key,
name varchar(20)
)engine=innodb;
insert into user values(1,'lily');
insert into user values(2,'tom');
insert into user values(3,'bob');
insert into user values(4,'jimi');
insert into user values(5,'moth');
如果我跑
explain select * from user where id in (1,2,3)
或
Mysql显示类型为range,
但在运行时:
explain select id from user where id in (1,2,3)
Mysql显示类型为index。
那么为什么会有这样的差异呢?这里需要了解的关键是,对于如此小的表,MySQL可能不会选择使用任何索引,尽管有一个索引可以帮助查询计划更快地执行。实际上,您显示的两个查询都应该是可搜索的,MySQL应该能够使用
id
主键上的聚集索引。尝试添加更多数据,MySQL可能会使用索引扫描来满足查询。我正在努力找出这些查询之间的差异确实,正如您所说,我向表中添加了大量数据以验证这一点。非常感谢。
explain select id from user where id in (1,2,3)