Tengo una tabla de MySQL:¿Puede MySQL usar el índice en una RANGE QUERY con ORDER BY?
CREATE TABLE mytable (
id INT NOT NULL AUTO_INCREMENT,
other_id INT NOT NULL,
expiration_datetime DATETIME,
score INT,
PRIMARY KEY (id)
)
necesito para ejecutar la consulta en forma de:
SELECT * FROM mytable
WHERE other_id=1 AND expiration_datetime > NOW()
ORDER BY score LIMIT 10
Si añado este índice para Mytable:
CREATE INDEX order_by_index
ON mytable (other_id, expiration_datetime, score);
sería MySQL ¿Puedo usar el order_by_index
completo en la consulta anterior?
Parece que debería ser capaz de hacerlo, pero entonces de acuerdo con MySQL documentation: "El índice también se puede utilizar incluso si el ORDER BY no coincide con el índice de exactitud, siempre y cuando todas las partes no utilizadas de la index y todas las columnas ORDER BY adicionales son constantes en la cláusula WHERE. "
El pasaje anterior parece sugerir que el índice solo se usaría en una consulta constante mientras que el mío es una consulta de rango.
¿Alguien puede aclarar si el índice se usaría en este caso? Si no, ¿de qué forma podría forzar el uso del índice?
Gracias.
>> No se puede utilizar el índice para el fin de porque no se está comparando expiration_datetime a una constante. << Creo que hay un error aquí. Sin embargo, sí explicaste bien la causa de eso en la segunda parte de la respuesta. – kellogs