创建视图或表或创建一个条目以自动生成另一个表中的行?

时间:2014-10-09 04:08:02

标签: mysql view triggers

我有一个桌面商店所有的blocktrade(每笔交易超过500,000美元,它可以是出价交易(直接购买),询问transactino(直接卖出),如上所示。我将每天对结果进行总结但是由于BlockTrade中的数据量非常大(数十万行数据甚至更多),我只会按照预期的方式使用汇总数据。

当我从[View]中选择*时,问题是非常慢,我是否应该创建一个存储数据输出的表,因为不需要再从BlockTrade表中查询历史数据。

表:BlockTrade

代码| DateTime |价格|订单(买入= 1,卖出= -1)|卷|量

部分SQL汇总当天同一股票的相关交易: ... - > sum(当Order = 1然后Amount else 0结束时的情况)... - >转换为结果

查看:摘要1

代码|日期|价格| TotalBuyVol | TotalBuyAmount | TotalSellVol | TotalSellAmount

每天每个股票的每个价格都有一个摘要。

查看:摘要2

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

每天每个股票,而不是每个价格,总买卖量和金额的总结。

1 个答案:

答案 0 :(得分: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')
  );

您可以访问摘要1& summary2如下:

select * from summary1; 
select * from summary2; 

您可以使用sqlfiddle link