【问题标题】:MySQL - INSERT INTO table SELECT WHERE field IN (subquery) - Use of IN make things extremely slow, correct way to do it?MySQL - INSERT INTO table SELECT WHERE field IN (subquery) - 使用 IN 使事情变得非常缓慢,正确的做法是什么?
【发布时间】:2015-05-29 12:04:26
【问题描述】:

我有一个在表中插入数据的查询,从另一个表中检索数据,WHERE 条件指定第一个表中的所有记录:

INSERT INTO `table_a` (`field_x`, `field_y`)
SELECT `field_x`, `field_y`
FROM `table_b`
WHERE `field_x` IN
(
   SELECT `field_x`
   FROM `table_a`
) ON DUPLICATE KEY UPDATE `field_y`=`table_b`.`field_y`, `field_x`=`table_b`.`field_x`

实际上,对于 table_a 的每个 field_x,我想从 table_b 中选择所有 field_xfield_y,然后通过插入所有返回的行来更新 table_a; 我已经知道在子查询中使用 IN 很慢; 我不确定这是正确的方法,考虑到它也是超慢的,我也在问自己这种方法是否完全错误.. 这里有没有任何 SQL 专家可以帮助我找到解决问题的正确方法?

【问题讨论】:

  • 你试过加入吗?
  • 你的表有合适的索引吗?

标签: mysql subquery where-in insert-select


【解决方案1】:
INSERT INTO `table_a` (`field_x`, `field_y`)
SELECT `table_b`.`field_x`, `table_b`.`field_y`
FROM `table_a`
join `table_b`
on DUPLICATE KEY UPDATE `table_a`.`field_y`=`table_b`.`field_y`

【讨论】:

  • ..我的意思是,它可以工作,但仍然很慢.. 20 多秒.. 有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 2011-09-02
  • 2012-03-11
  • 2011-04-13
  • 1970-01-01
  • 2011-04-06
  • 1970-01-01
  • 1970-01-01
  • 2011-10-25
相关资源
最近更新 更多