Aunque MySQL suele ser inteligente, a veces no viene mal ayudarle con los orders. Ejemplo, tabla con muchos municipios, donde queremos obtener unos cuantos haciendo búsqueda por nombre, y luego ordenarlos por capitales y códigos postales ascendentes. La consulta típica sería así:
SELECT m1.id, m1.nombre, m1.codigo_postal, m1.capital
FROM Municipio m1
WHERE m1.nombre LIKE "%Girona%"
ORDER BY m1.capital DESC , m1.codigo_postal ASC
12 total, La consulta tardó 0.5366 seg
Si le echamos una mano a MySQL:
SELECT m2.id AS id, m2.nombre AS nombre, m2.codigo_postal AS codigoPostal, m2.capital
FROM (
SELECT m1.id, m1.nombre, m1.codigo_postal, m1.capital
FROM Municipio m1
WHERE m1.nombre LIKE "%Girona%"
) m2FROM Municipio m1
WHERE m1.nombre LIKE "%Girona%"
ORDER BY m2.capital DESC , m2.codigo_postal ASC
12 total, La consulta tardó 0.0886 seg
Parece ser que en algunos casos, como en éste, MySQL tiene a ordenar la tabla antes de realizar la búsqueda, con lo que el resultado es bastante peor.
pd: La prueba está hecha con varios municipios y tras varios reinicios de MySQL. No parece un tema de caché.
No hay comentarios:
Publicar un comentario