2011-11-06 79 views
1

我的分析團隊使用的查詢是這樣的:總和2個表的查詢使用子查詢

SELECT 
    SUM(ul.upload_bandwidth) + SUM(dl.download_bandwidth) AS total 
FROM 
    upload_facts ul, download_facts dl 
WHERE 
    ul.date BETWEEN '2011-09-01' AND '2011-09-30' AND 
    dl.date BETWEEN '2011-09-01' AND '2011-09-30'; 

這走的是一條很長的時間,12000秒,由於「加入」正在發生。

從兩個表中分別求和只需幾秒鐘。我正在考慮每天將一筆款項放在一張單獨的表格中以加快速度。不過,我認爲這應該比這更容易。

我想消除聯接和使用子查詢來做到這一點,但我不是100%確定如何。我嘗試了以下,但它沒有奏效。

SELECT 
    (select upload_bandwidth from upload_facts where date 
     BETWEEN '2011-09-01' AND '2011-09-30') 
    + 
    (select download_bandwidth from downloaded_facts where date 
     BETWEEN '2011-09-01' AND '2011-09-30'); 

回答

4
SELECT 
    (SELECT SUM(`upload_bandwidth`) FROM `upload_facts` WHERE `date` 
     BETWEEN '2011-09-01' AND '2011-09-30') 
    + 
    (SELECT SUM(`download_bandwidth`) FROM `download_facts` WHERE `date` 
     BETWEEN '2011-09-01' AND '2011-09-30') 
AS `total` 

應該這樣做。

+0

完美。經過測試,原來的查詢耗時13000+秒,現在需要16次。還有一些改進的餘地,但是一個很大的改變。 – Jericon

+0

'date'是兩個表中的索引嗎?如果不是的話,這會有很大的幫助。 –

+0

是的。不過,在這兩個表格之間,該範圍內接近9 M行。 – Jericon