Tengo la misma instrucción MySQL SQL ejecutándose en 2 bases de datos diferentes (mi máquina local y mi máquina de producción). El que está en mi máquina local funciona más rápido mientras que el de la producción es lento. Aquí están los resultados de EXPLAIN en cada uno.
Máquina local
Máquina de producción
Prefiero no publicar la consulta exacta si no es necesario.
La única diferencia que puedo decir entre los 2 es que mi máquina local está ejecutando la versión 5.6 mientras el server de producción está ejecutando 5.5. Además, los datos en mi server tienen 3 días de antigüedad, que no son muchos loggings. Específicamente, estoy mirando la fila 2 de la explicación donde un tipo dice "ref" y el otro dice "TODO" y hay una diferencia de más de 28k filas que se leen. La única diferencia entre las 2 estructuras es el campo TimeModified que no está siendo utilizado por la consulta
En MySQL 5.5 y versiones anteriores, una tabla derivada nunca tuvo índices. La única forma en que se accedería a una tabla derivada era mediante un análisis completo. (Ese es el ALL
que ve en la salida EXPLAIN del server 5.5).
Con MySQL 5.6.3, MySQL tiene la capacidad de agregar un índice a una tabla derivada, lo que puede mejorar el performance. (Tenga en count el nombre del índice: <auto_key1>
en la salida EXPLAIN del server 5.6).
Referencia: https://dev.mysql.com/doc/refman/5.6/en/subquery-optimization.html
Puse esto como un comentario primero, pero creo que también es la respuesta 🙂
Las estructuras de su tabla pueden ser idénticas, pero probablemente sus datos no lo son.
La cantidad de filas en sus tablas influirá en el plan de ejecución.