我有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);
我从工具中获取数据。这就是数据未规范化的原因。
有更快的方法吗?
答案 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 。或者创建一个组合索引。这将大大加快您的查询速度。