2016-02-08 276 views
0

我在historical_data表中有大約600萬條記錄。我正在嘗試查找最後記錄的行不等於表格中最高日期的所有符號。我相信這個查詢會起作用,但它需要永遠運行。事實上,它每次都會超時。有沒有辦法讓這個查詢運行得更快?Date = max(Date)緩慢運行

select symbol, histDate 
from historical_data as a 
where histDate = 
    (select max(histDate) 
    from historical_data as b 
    where a.symbol = b.symbol); 
+0

使用一個關聯子查詢,而不是一個corelated一個 – Strawberry

回答

1

您需要此查詢的索引。最好的指數是historical_data(symbol, histdate)

你可能會更快地發現它是短語查詢爲:

select hd.* 
from historical_data hd join 
    (select symbol, max(histDate) as maxhd 
     from historical_data 
     group by symbol 
    ) s 
    on hd.histDate = s.histDate; 

編輯:

哎呀。您的示例查詢不會執行文本所要的內容。對於:

select symbol 
from historical_data hd cross join 
    (select max(histDate) as maxhd from historical_data) m 
group by symbol, maxhd 
having max(hd.histDate) <> maxhd; 
+0

最後查詢運行方式更快。謝謝。 – terryfisher12

+0

@ terryfisher12。 。 。最後的查詢也做你說你想做的事情。 –