tengo una mesa:
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');si corro
explain select * from user where id in (1,2,3)o
explain select name from user where id in (1,2,3)Mysql muestra que el tipo es range , pero cuando se ejecuta:
explain select id from user where id in (1,2,3)Mysql muestra que el tipo es index . Entonces, ¿por qué hay tanta diferencia?
Lo más importante a tener en cuenta aquí es que, para una tabla tan pequeña, es posible que MySQL no elija usar ningún índice, a pesar de que hay un índice que podría ayudar a que el plan de consulta se ejecute más rápido. En realidad, las dos consultas que mostraste deberían ser sargables, y MySQL debería poder usar el índice agrupado en la clave principal de id . Intente agregar sustancialmente más datos, y MySQL probablemente usará un escaneo de índice para satisfacer la consulta.