MySQL结合了n个表

时间:2015-11-19 17:17:58

标签: mysql merge myisam

我有n个(源)表,它们具有相同的结构,每个表都有几百万行。这些表中的每一个都定期从不同来源接收新数据。

(例如:销售表。每家商店都有自己的销售表。每天有1000家商店销售数十万件商品。你会如何组合这些商品?)

我想将它们合并到一个摘要表中。我希望任何源表中的更改都反映在摘要上,并且摘要上的更改将反映在相应的源表中。

(例如:销售表。当新销售发生时,汇总表会更新。如果在汇总表中对销售进行了更改,则会反映在相应的商店表中。)

我可以看到三种解决方案。

1.创建一个事件/触发器,它将在给定时间或插入/更新/删除后刷新我的汇总表。 类似的东西:

#Some event triggers this
DROP TABLE table_summary;
INSERT INTO table_summary
SELECT * FROM table1
UNION ALL
SELECT * FROM table2
UNION ALL
SELECT * FROM tablen...

我认为,这里的缺点是性能,我不认为每次在其中一个表上有INSERT/UPDATE/DELETE时我都能负担得起这个查询。

2.创建一个视图。

CREATE VIEW table_summary AS
SELECT * FROM table1
UNION ALL
SELECT * FROM table2;
#This query takes 90s to complete

性能方面,我遇到与解决方案#1相同的问题

3.为每个表创建一个INSERT/UPDATE/DELETE触发器。这是很多触发器和MySQL限制为每个表一个。我开始这样,但维护代码脚手架看起来令人印象深刻,可能难以维护。

我确信这是一个我没有想到的更好的方式。

0 个答案:

没有答案