Question

Quand je les 2 inclus lignes commentées dans la sous-requête suivante, semble que cela prend une éternité jusqu'à ce que mon Sybase ASE 12.5 serveur obtient des résultats. Sans ces 2 lignes la requête passe bien. Ce qui est si mal avec ce groupe?

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
Était-ce utile?

La solution 3

ok j'ai découvert quel était le problème Je devais inclure l'ID utilisateur dans la sous-requête: « où days_played.user_id = sgia.user_id et sgia.day_played

Autres conseils

Découvrez ce que la requête en utilisant notamment showplan pour montrer l'explication.

Dans ce cas, ne pouvez-vous éliminer la sous-requête en en faisant partie de la requête principale?

Pouvez-vous essayer de réécrire la requête comme suit?

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

Je suppose que cela devrait vous donner une meilleure performance ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top