Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Problemas al ejecutar query

Estas en el tema de Problemas al ejecutar query en el foro de Mysql en Foros del Web. Hola a todos de nuevo por aqui, intento ejecutar este query pero tarda mucho en ejecutar la consulta, alguien me podria decir si esta sentencia ...
  #1 (permalink)  
Antiguo 15/04/2014, 16:47
 
Fecha de Ingreso: noviembre-2011
Ubicación: Paris
Mensajes: 450
Antigüedad: 12 años, 5 meses
Puntos: 7
Problemas al ejecutar query

Hola a todos de nuevo por aqui, intento ejecutar este query pero tarda mucho en ejecutar la consulta, alguien me podria decir si esta sentencia se puede acortar mas?

Código MySQL:
Ver original
  1. SELECT   idPerson, MAX(updatedDate) AS updatedDate
  2. FROM  (SELECT t.idPerson, MAX(d.updatedDate) AS updatedDate
  3. FROM transacciones AS t
  4. INNER JOIN detalle_de_las_transacciones AS d ON d.idTransaction = t.idTransaction
  5. WHERE (d.active = 1) AND (t.active = 1)
  6. GROUP BY t.idPerson
  7.  
  8.  
  9. SELECT t.idPerson, MAX(d.updatedDate) AS updatedDate
  10. FROM transacciones AS t
  11. INNER JOIN detalle_de_las_transacciones AS d ON d.idTransaction = t.idTransaction
  12. WHERE (t.active = 0)
  13. GROUP BY idPerson
  14.  
  15.  
  16. SELECT t.idPerson, MAX(d.updatedDate) AS updatedDate
  17. FROM transacciones AS t
  18. INNER JOIN detalle_de_las_transacciones AS d ON d.idTransaction = t.idTransaction
  19. GROUP BY idPerson
  20.  
  21.  
  22. SELECT tl.idPerson, tl.createdDate AS updatedDate
  23. FROM todos_los_leads AS tl
  24.  
  25.  
  26. SELECT n.idCreatorObject, MAX(n.noteDate) AS updatedDate
  27. FROM  NOTE_notes AS n
  28. WHERE (idCreatorObjectType = 6)
  29. GROUP BY idCreatorObject
  30.  
  31.  
  32. SELECT tl.idPerson, tl.infoLastUpdated AS updatedDate
  33. FROM todos_los_leads AS tl
  34.  
  35.  
  36. SELECT tl.idPerson, tl.lastAssignment AS updatedDate
  37. FROM todos_los_leads AS tl) AS dates
  38. GROUP BY idPerson
  #2 (permalink)  
Antiguo 16/04/2014, 21:53
 
Fecha de Ingreso: enero-2014
Mensajes: 7
Antigüedad: 10 años, 3 meses
Puntos: 1
Respuesta: Problemas al ejecutar query

Hola,

Sin las tablas, sin poder probar y sin saber cual es el contexto y el objetivo de la consulta es difícil indicar una mejor consulta, pero estos son mis comentarios y sugerencias:

las dos primeras subconsultas creo que se hacen a las mismas tablas, solo cambia la cláusula WHERE, así en una tienes:

WHERE (d.active = 1) AND (t.active = 1)

y en la segunda
WHERE (t.active = 0)

Creo que puedes hacer las dos consultas juntándolas en una sola, con algo como:

WHERE ( (d.active = 1) AND (t.active = 1) ) or (t.active = 0)

Que me parece que sería equivalente a

WHERE d.active <> 1 or t.active <> 1


Otra sugerencia, por lo que veo al final quieres el la fecha mayor por persona, de todas las consultas, no creo que tenga caso que saques el mayor de cada subconsulta y luego la fecha mayor de todas, pensaría que el motor de búsqueda trabaja de más. Yo quitaría todas las funciones MAX y agrupaciones, simplemente consultaría todo, lo uniría con JOINs y en la consulta principal ejecutaría la agruapción: Así la consulta creo que podría quedar como sigue:

Código HTML:
    SELECT   idPerson, MAX(updatedDate) AS updatedDate
    FROM  (
		SELECT t.idPerson, d.updatedDate
			FROM transacciones AS t
			INNER JOIN detalle_de_las_transacciones AS d ON d.idTransaction = t.idTransaction
			WHERE d.active <> 0 or t.active <> 1

		UNION
     
		SELECT t.idPerson, d.updatedDate
			FROM transacciones AS t
			INNER JOIN detalle_de_las_transacciones AS d ON d.idTransaction = t.idTransaction
     
		UNION
     
		SELECT tl.idPerson, tl.createdDate AS updatedDate
			FROM todos_los_leads AS tl
     
		UNION
     
		SELECT n.idCreatorObject, n.noteDate AS updatedDate
			FROM  NOTE_notes AS n
			WHERE (idCreatorObjectType = 6)
     
		UNION
     
		SELECT tl.idPerson, tl.infoLastUpdated AS updatedDate
			FROM todos_los_leads AS tl
     
		UNION
		 
		SELECT tl.idPerson, tl.lastAssignment AS updatedDate
			FROM todos_los_leads AS tl
	) AS dates

	GROUP BY idPerson

Creo que puede haber otras cosas que se pueden hacer, como implementar índices, el orden de las consultas etc, pero sin más información estaría adivinando.

Espero que mejore el desempeño de la consulta.

Etiquetas: join, query, select
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:58.