Perdona, gnzsoloyo, pero eso no es correcto.
El uso de un operador OR sí tiene ese efecto, pero el uso de <= o >= no tiene que ver. Fíjate... un ejemplo:
create table pruebaindice (valor int not null, nombre varchar(50) not null, key idx_valor(valor));
la llenas con cuanta data quieras:
insert into pruebaindice (valor,nombre) select round(rand()*100), concat("nombre", round(rand()*100));
o luego de que ya tienes algunos datos haces este otro para llenarlo más rápido:
insert into pruebaindice (valor,nombre) select round(rand()*100), concat("nombre", round(rand()*100)) from pruebaindice;
En fin... lo llené con
Código HTML:
mysql> select count(*) from pruebaindice;
+----------+
| count(*) |
+----------+
| 31744 |
+----------+
y mira:
Código HTML:
mysql> explain select * from pruebaindice where valor>=20 and valor<40;
+----+-------------+--------------+-------+---------------+-----------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------------+-------+---------------+-----------+---------+------+------+-------------+
| 1 | SIMPLE | pruebaindice | range | idx_valor | idx_valor | 4 | NULL | 5353 | Using where |
+----+-------------+--------------+-------+---------------+-----------+---------+------+------+-------------+
1 row in set (0.00 sec)
Como puedes ver, MySQL sí ha utilizado un índice para la ejecución del query.