我正在尝试通过添加存储在单独表中的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。如果有人能告诉我为什么会这样,或者我如何能够更有效地做到这一点以便它不会崩溃,我将非常感激。非常感谢。
答案 0 :(得分:0)
"每列都被编入索引"。实际上,您需要复合索引。此查询的最佳选择是:
create idx_budget_field1_field2_field3_field4_budget_id
on budget(field_1, field_2, field_3, field_4, budget_id);