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.