Ver Mensaje Individual
  #2 (permalink)  
Antiguo 16/04/2014, 21:53
victorgspx
 
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.