2014-10-09 76 views
0

我有一個表存儲所有的交易(每筆交易超過500,000美元,可以是出價交易(直接購買),也可以詢問transactino(直接出售),如上所示),我將每天彙總結果。但由於BlockTrade中的數據量非常大(數十萬行數據甚至更多),因此我將僅使用下面所述的彙總數據。創建視圖或表或創建一個條目來自動生成另一個表中的行?

問題是,當我從[查看]選擇*,I須創建一個表中存儲的數據輸出,以從BlockTrade表再次查詢不需要歷史數據

表:BlockTrade

代碼|日期時間|價格|訂單(買入= 1,賣出= -1)| Vol |量

SQL的

部分總結當天同一股票的相關交易: ... - >總和(情況下,當訂單= 1,那麼其他金額0結束)... - >轉化爲結果

查看:摘要1

代碼|日期|價格| TotalBuyVol | TotalBuyAmount | TotalSellVol | TotalSellAmount

通過每天每股價格,它將有一個總結。

查看:摘要2

代碼|日期| TotalBuyVol | TotalBuyAmount | TotalSellVol | TotalSellAmount | NetAmount

通過每日股票,而不是每個價格,總買賣量和總量的總結。

回答

0

如果您將頻繁訪問數據。您可以通過簡單的選擇語句輕鬆創建視圖並訪問數據,並獲得更好的性能&。

create view summary1 as (
select CODE, date_format(DateTime,'%d/%m/%Y'), PRICE, sum(buyvol), sum(buyamount),sum(sellvol),sum(sellamount) 
from BlockTrade group by CODE, date_format(DateTime,'%d/%m/%Y'), PRICE); 

create view summary2 as (
select Code, date_format(DateTime,'%d/%m/%Y'), sum(buyvol), sum(buyamount),sum(sellvol),sum(sellamount), sum(price) 
from BlockTrade group by CODE, date_format(DateTime,'%d/%m/%Y') 
); 

只是可以按如下方式訪問summary1 & summary2:

select * from summary1; 
select * from summary2; 

在這裏,您與sqlfiddle link

+0

我搜索了論壇,發現有的人說去表現不會可以提高很多,因爲它只是一個存儲的sql語句。如果我不想再次查詢視圖(因爲它仍然需要每次運行查詢,將摘要的結果存儲到表中是否好處)?因爲BlockTrade表將每天更新。創建摘要後,我不需要查詢blocktrade表格。我只需要彙總表進行計算。數據庫中有1700只股票。 – Trader 2014-10-09 08:07:36

+0

是的,我同意。你看不到性能上的巨大差異。使用視圖的另一個原因是便利性和安全性。您可以在視圖和選擇語句中找到n篇文章。但我看到你的數字非常少。如果您完全使用索引和分區等概念,Mysql有能力以超乎想象的速度快速完成數百萬條記錄的複雜連接。 – Logan 2014-10-09 09:04:57

+0

可以幫助我如何創建行插入到表中說「TxSummary」的結果從選擇語句「選擇代碼,datE_format ...」?我會自動一天一天地運行它。那麼我可以快速從摘要表中檢索。謝謝。 – Trader 2014-10-16 07:47:39

相關問題