2012-08-31 49 views
0

我正在爲我工​​作的公司創建一個簡單的業務分析應用程序,並且有一個來自過去6年的銷售交易的100mb csv文件,我已將其解析爲多個數據庫。我可以應用什麼優化來加速此查詢?

一個我想在我的應用程序中顯示的數字是營業額和每天每客戶利潤,所以我有一個while循環,看起來像下面這樣:

while(start_date < current_date) 
    { 
     SELECT SUM(profit), SUM(turnover) FROM sales WHERE date = @date 
    } 

所以,我運行在每天有幾十萬行的桌子上查詢,因爲每天有6年的客戶。

我總是被認爲可以在數據庫中執行任何工作,這應該是 - 這就是爲什麼我使用SUM查詢來填充列。

我還能做其他什麼優化?目前它正在採取......好吧,我無法告訴你,因爲它已經在8GB四核服務器上運行了最後一個小時,並且看起來在2-3%左右。

我正在使用SQL Server Compact Edition,它是C#/ .NET中的winforms應用程序,但數據庫顯然是此處的瓶頸。

回答

0

嘗試引入彙總表,您將擁有每日統計信息。無論何時將更多數據添加到銷售表中,都可以更新該彙總表[帶有觸發器或應用程序邏輯]。

+0

這就是我正在做的更新。我可能應該解釋說,在我原來的問題中 - 真正的問題是關於如何優化和加速最初的查詢,因爲它需要多年的時間。 :) – Anonymous

+0

你有索引日期列嗎? – pQd

1

我只會運行這個(修改過的)查詢一次並遍歷結果集。它應該是更快的方式。

SELECT 
    customer, date, SUM(profit), SUM(turnover) 
FROM 
    sales 
WHERE 
    date < current_date 
GROUP BY 
    customer, date 
ORDER BY 
    customer, date 

for each (row in resultset) { 
    //process customer/date 
}