我想读取数据以进行报告。目前,我使用另一个表的计算数据填充一个表,并从填充的表中读取数据以进行报告。我目前的逻辑是删除旧数据并插入新数据,所有这些都在一个事务中。
更新
要求
1)下面的逻辑是每秒运行一次。请注意,其他进程也会以相同的刷新率更新 tableB。
2) 表 B 用于报告目的。TableA 和 TableB 位于不同的数据库中。
3) TableB 包含大约 1000 万行,大约 400 万行将由下面的代码每秒更新一次。其他进程也以相同的刷新率更新tableB中的其他部分数据(6 = 10-4百万)。
我担心的是:
1) 三个语句使用相似的 sum 和 where 子句,可能会有所改进。
2)tablea中大约有1-2百万行要更新到tableB。使用显式临时表可能会减慢速度。
3)使用事务可能会减慢,但这似乎是唯一的方法。
4)更新数据可能是比删除和插入更好的选择(我应该选择哪一个?)
我想找到一种更好的性能方式(包括重新设计表格等)。下面是目前的方式:
下面的伪代码:
start/begin transaction here
DELETE from tableb data that I want to insert below, e.g. delete data where Code = 'code'
INSERT INTO tableb(Code, Total)
SELECT sum(a.Code, price)
FROM tablea a
GROUP BY a.Code;
IINSERT INTO tableb(Code, Total)
SELECT sum(a.Code price) -- use price
FROM tablea a
WHERE a.meanPrice IS NOT NULL
GROUP BY a.Code;
INSERT INTO tableb(Code, Total)
SELECT sum(a.Code, meanPrice ) -- use meanPrice
FROM tablea a
WHERE a.meanPrice IS NOT NULL
GROUP BY a.Code;
Commit transaction here
它适用于 MySQL,但理想情况下它应该是通用的。
任何的想法?