合并2个表太慢了

时间:2013-08-13 07:13:26

标签: mysql sql performance

我有2个类似的表,包含大约200,000行。如果表1中没有类似的数据,我想将表2中的数据添加到表1.我做了一个查询,显示我可以复制的ID。但是查询需要一天多的时间才能执行,我希望在+ - 2小时内执行此操作。

这是查询(其中所有数据都是字符串):

SELECT id
FROM   verwerkt2 v2
WHERE  0 = (SELECT Count(*)
            FROM   verwerkt
            WHERE  naam = v2.naam
                   AND postcode = v2.postcode
                   AND huisnummer = v2.huisnummer);  

我从工具中获取数据。这就是数据未规范化的原因。

有更快的方法吗?

3 个答案:

答案 0 :(得分:3)

你可以尝试

INSERT INTO verwerkt (Naam, Postcode, Huisnummer, ...)
SELECT Naam, Postcode, Huisnummer, ... 
  FROM verwerkt2 v2
 WHERE NOT EXISTS
(
  SELECT *
    FROM verwerkt
   WHERE Naam       = v2.Naam
     AND Postcode   = v2.Postcode 
     AND Huisnummer = v2.Huisnummer        
);

确保您拥有所有必要的指数。特别要确保您在(Naam, Postcode, Huisnummer)

中有覆盖索引verwerkt
ALTER TABLE verwerkt ADD KEY (Naam, Postcode, Huisnummer);

答案 1 :(得分:1)

如果您用于比较的列集( naam + 邮政编码 + huisnummer )在目标表中应该是唯一的,您应该在它们上添加UNIQUE索引

ALTER TABLE `verwerkt` ADD UNIQUE KEY `my_key` (naam,postcode,huisnummer);

然后简单地

INSERT IGNORE INTO verwerkt SELECT * FROM verwerkt2;

这将消除重复,并且应该更快

答案 2 :(得分:0)

您必须在联接中使用的字段上创建索引: Naam 邮政编码 Huisnummer 。或者创建一个组合索引。这将大大加快您的查询速度。