我正在MySQL服务器上运行两个表内连接查询,速度非常慢,需要3个小时才能完成。
UPDATE table_A ta
JOIN table_B tb
ON ta.field1= tb.field1
AND ta.field2 = tb.field2
SET ta.field2 = tb.field2,
ta.field3 = tb.field3
WHERE tb.field5 = 'ABC'
table_A有650,000行 table_B有100,000行
ta。field1
,ta。field2
,tb。field1
,tb。field2
,tb field5
都被编入索引并显示在EXPLAIN中结果
知道如何让它跑得更快吗?
答案 0 :(得分:1)
对于此查询:
UPDATE `table_A` ta INNER JOIN
table_B tb
ON ta.`field1`= tb.`field1` AND ta.`field2` = tb.`field2`
SET ta.`field2` = tb.`field2`,
ta.`field3` = tb.`field3`
WHERE tb.`field5` = 'ABC';
没有必要更新field2
,因为新值与旧值相同(基于join
条件)。
其中一种指数方法应该效果最佳:
table_B(field1, field2, field5)
table_B(field5, field1, field2)
,table_A(field1, field2)
哪种更好用取决于数据的性质。但是,非常重要的是,您使用的是复合索引,而不是每个字段上的单独索引。