0

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

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

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

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

有没有更快的方法来做到这一点?

4

3 回答 3

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);
于 2013-08-13T07:28:30.817 回答
1

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

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

然后简单地

INSERT IGNORE INTO verwerkt SELECT * FROM verwerkt2;

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

于 2013-08-13T07:35:03.990 回答
0

You have to create indices on the fields used in the join: Naam, Postcode and Huisnummer. Or create a composed index. This will speed up your query by magnitudes.

于 2013-08-13T07:24:09.823 回答