【问题标题】:Most efficient way to insert a changed column's difference value into a table with matching columns?将已更改列的差异值插入具有匹配列的表中的最有效方法?
【发布时间】:2013-04-07 14:59:50
【问题描述】:

这个问题很难用一个句子来表达。这是前提:

我有两个结构如下的表:

create table TableA(
id int, <-- this is a unique ID in TableA but not in TableB
value1 int,
value2 int,
value3 int,
value4 int,
value5 int,
value6 int,
update_time DATETIME
)

create table TableB(
id int,
value1 int,
value2 int,
value3 int,
value4 int,
value5 int,
value6 int,
update_time DATETIME
)

TableA 有 100,000 行数据(API 响应的最新副本)。每隔一小时,API 就会为 TableA 中的每个 ID 返回新数据,并且 API 响应会使用每个唯一 ID 的最新数据更新 TableA。所有响应都保存到TableB 中,以便随着时间的推移进行数据分析(因此每小时有100,000 行添加到TableB。)。但是,并非所有数据每小时都会更改。事实上,大部分数据根本没有变化。

这是我想要的结构: 假设 API 返回 id = 432 的数据,并且所有值都相同,除了 value4value4 包含 505043(而不是 505000,这是当前存储在 TableA 中的 id=432 的值)。我想取 505043 - 505000 = 43 并将其存储到TableB

INSERT INTO TableB (id, value6) VALUES (432, 43)

实现此目的最有效的方法是什么?我最初的想法是将TableA 中的数据检索到PHP cron 脚本中,计算数据差异(如果有),然后相应地构造插入语句。但是由于这个过程每秒会发生很多次,所以我想确保我使用的是最有效的方法。

提前致谢。

【问题讨论】:

  • TableA 中由于某个 API 返回而更新的所有行的 update_time 是否相同?

标签: mysql insert unique


【解决方案1】:

您可以创建一个trigger,每当在 TableA 中插入或更新一行时,它就会在 TableB 中插入一行。

Here is an example 了解每当在另一个表中插入一行时,如何使用触发器将一行插入到表中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    • 1970-01-01
    • 2016-05-31
    • 2017-10-24
    相关资源
    最近更新 更多