2014-10-09 33 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

相关问题