内联接查询使用索引表运行速度很慢?

时间:2017-10-27 17:15:53

标签: mysql sql query-optimization

我正在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中结果

知道如何让它跑得更快吗?

1 个答案:

答案 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)

哪种更好用取决于数据的性质。但是,非常重要的是,您使用的是复合索引,而不是每个字段上的单独索引。