¿Por qué agrupar en una subconsulta causa problemas
-
21-09-2019 - |
Pregunta
Cuando incluyo las 2 líneas comentadas en la siguiente sub consulta, parece que se tarda una eternidad hasta que mi Sybase ASE 12.5 servidor obtiene ningún resultado. Sin estas 2 líneas de la consulta se ejecuta bien. ¿Qué es tan malo en ese grupo?
select days_played.day_played, count(distinct days_played.user_id) as OLD_users
from days_played inner join days_received
on days_played.day_played = days_received.day_received
and days_played.user_id = days_received.user_id
where days_received.min_bulk_MT > days_played.min_MO
and days_played.user_id in
(select sgia.user_id
from days_played as sgia
where sgia.day_played < days_played.day_played
--group by sgia.user_id
--having sum(sgia.B_first_msg) = 0
)
group by days_played.day_played
Solución 3
ok descubrí cuál era el problema
Tenía que incluyen la identificación del usuario en la sub consulta: "donde days_played.user_id = sgia.user_id
y sgia.day_played
Otros consejos
Para saber lo que hace la consulta utilizando el plan de presentación para mostrar la explicación.
En este caso no se puede eliminar la sub consulta por lo que es parte de la consulta principal?
Podría intente volver a escribir la consulta de la siguiente manera?
select days_played.day_played,
count(distinct days_played.user_id) as OLD_users
from days_played
inner join days_received on days_played.day_played = days_received.day_received
and days_played.user_id = days_received.user_id
where days_received.min_bulk_MT > days_played.min_MO
and 0 = (select sum(sgia.B_first_msg)
from days_played as sgia
where sgia.user_id = days_played.user_id
and sgia.day_played < days_played.day_played
)
group by days_played.day_played
Creo que esto debe darle un mejor rendimiento ...