2016-08-19 78 views
0

由于某些原因,以下查询永远不会结束。但是,如果我删除from子句中的最后一个子查询,它将在500毫秒内运行将子查询添加到子句时永不结束查询

有关为什么?

select 
    new.app_id, 
    'support' as domain, 
    'summary' as type, 
    90 as interval, 
    json_build_object(
     'new', count(new), 
     'closed', count(closed), 
    ) as data 
from (
    SELECT * from conversations c 
    WHERE c.inserted_at::date > (current_date - (90 || ' days')::interval)::date 
) as new, 
(
    SELECT * from conversations c 
    WHERE c.inserted_at::date > (current_date - (90 || ' days')::interval)::date 
) as closed 
group by new.app_id 
+0

在select中使用json_build_object需要很多的cpu时间。我建议使用最后一个子查询和没有子查询来检查计数行,可能在子查询查询中返回太多行 –

+0

我看不到你加入表的位置。你只是放置它们,但没有它们之间的连接。新建和关闭如何相互关联?也许我们可以帮助你更多,如果你说出你想要的并向我们展示一些数据示例。 – Christian

+0

很多问题在这里......你有两个相同的子查询;你可以用“with”子句使它们成为一个。也就是说,在任何情况下都不能保证子查询 - 也许只是在主查询中直接调用它们?剥离洋葱,你想做什么?如果你使用ID加入表本身,大概你会得到完全相同的数据,再乘以行数。你有样品输入和预期输出吗? – Hambone

回答

1

您没有将您的两个表格连接在一起,这可能会导致它运行很长时间。它基本上是按照你当前运行它的方式在两个表之间进行组合。

您需要加入from from中的两个subquerys,并使用某种JOIN ON来节省时间。

潜在加入new.App_id = closed.app_id?