Buenas a todos, estaba haciendo una consulta mysql pero utilizando el explain, me di cuenta de que tenía que optimizar una consulta, esta en cuestión
Código MySQL:
Ver original CONCAT(U.Nombre
,' ',U.PrimerApellido
) Personas
, SUM(Retiradas
) Retiradas
, E.id_Usuario_coloca Persona,
0 Retiradas,
LEFT JOIN Usuarios U
ON U.id_Usuario
=E.id_Usuario_coloca
E.id_Usuario_retira Persona,
0 Puestas,
LEFT JOIN Usuarios U
ON U.id_Usuario
=E.id_Usuario_retira
)Etiquetas
Ya que obtenía como resultado en la primera linea del explain:
table derived, type ALL possible_Keys NULL, ref NULL rows: 502777044 extra usin temporaty; Using filesort
Vamos una barbaridad de filas exploradas,
Así hice esta otra consulta (Obteniendo el mismo resultado) a priori mucho mas sencilla y fácil ya que en el explain veo que se consultan pocas filas:
Código MySQL:
Ver original CONCAT(U.Nombre
,' ',U.PrimerApellido
) Persona
, SUM(IF(E.id_Usuario_coloca
=U.id_Usuario
, 1, 0)) Puestas
, SUM(IF(E.id_Usuario_retira
=U.id_Usuario
, 1, 0)) Retiradas
, SUM(IF(U.id_Usuario
= E.id_Usuario_coloca
AND U.id_Usuario
= E.id_Usuario_retira
, 2, 1)) Total
LEFT JOIN Usuarios U
ON U.id_Usuario
=E.id_Usuario_coloca
or U.id_Usuario
=E.id_Usuario_retira
Pues bien, en la primera consulta me tardó 1.1 segundo y en la segunda 2.1 segundo, como puede ser eso si no tiene ni UNION ALL, menos GROUP BY y ORDER BY????
Me da que puede ser por el OR del LEFT JOIN de la tabla usuarios, ¿Qué opináis?