2016-08-19 82 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?