通过连接四列来更新mysql表

时间:2014-11-15 17:29:23

标签: mysql sql

我正在尝试通过添加存储在单独表中的budget_id列来更新大约250万个事务的表。如果四个字段匹配,我想在事务表中将budget_id列设置为等于预算表中的budget_id字段:

update transactions t 
join budget b on t.field_1 = b.field_1
and t.field_2 = b.field_2
and t.field_3 = b.field_3
and t.field_4 = b.field_4
set t.budget_id = b.budget_id;

预算表中约有6,900行,每行都有一个唯一的budget_id。所以我试图通过连接四列来将这6,900行与我的事务表中的250万行相匹配。每次运行此查询时,我都会失去连接。每个列都在两个表中编制索引,我使用的是具有8 GB RAM的Google云实例。我的innodb_buffer_pool_size是6 GB。如果有人能告诉我为什么会这样,或者我如何能够更有效地做到这一点以便它不会崩溃,我将非常感激。非常感谢。

1 个答案:

答案 0 :(得分:0)

"每列都被编入索引"。实际上,您需要复合索引。此查询的最佳选择是:

create idx_budget_field1_field2_field3_field4_budget_id
    on budget(field_1, field_2, field_3, field_4, budget_id);