Sql 为什么子查询中的分组会导致问题
当我在下面的子查询中包含2个注释掉的行时,我的Sybase 12.5 ASE服务器似乎要花很长时间才能得到任何结果。如果没有这两行,查询运行正常。这种分组有什么问题Sql 为什么子查询中的分组会导致问题,sql,sap-ase,Sql,Sap Ase,当我在下面的子查询中包含2个注释掉的行时,我的Sybase 12.5 ASE服务器似乎要花很长时间才能得到任何结果。如果没有这两行,查询运行正常。这种分组有什么问题 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
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
使用showplan显示解释,了解查询的作用
在这种情况下,您不能通过将子查询作为主查询的一部分来消除它吗?您可以尝试按如下方式重写查询吗
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
我想这会给你带来更好的性能…好的,我发现了问题所在 我必须在子查询中包含用户id:where days\u play.user\u id=sgia.user\u id 而sgia.day_played