2017-09-01 65 views
0

我需要一些值去除重复行的表,只留下1 我用这个查询增加执行时间的MySQL删除查询

DELETE n1 FROM cities_extended n1, cities_extended n2 WHERE n1.city_id > n2.city_id AND n1.city = n2.city 

,但我的表大约有65000行,执行时间过很长,我不知道如何加快这一点。

+0

使用交易。 – drescherjm

+0

如果不是这样,也许你的mysql需要更好地调整。很多发行版都为现代PC提供了非常不理想的默认设置。 – drescherjm

+0

这两个表上的多列索引(city_id,city)应该有帮助 –

回答

1

确保where子句中的所有字段都已编入索引。如果它们中的任何一个没有编入索引运行此查询将为它们编制索引。

ALTER TABLE cities_extended ADD INDEX `city` (`city`) 

如果这没有索引,它肯定会加快查询速度。

您也可以尝试使用临时表。

drop table if exists `temp_for_duplicates` 
CREATE TABLE `temp_for_duplicates` AS select * from `cities_extended` where 1 group by [field with duplicates] 

truncate table `cities_extended` 

INSERT INTO `cities_extended` SELECT * FROM `temp_for_duplicates` 
+0

他们被索引我猜city_id是PK,它是独一无二的,但有像缺口city_id(1-100,200-205,1000-2000) – tttaaabbb

+0

需要多长时间?你需要多快多少?您可以使用group by将数据插入临时表中,以便重复字段,然后截断表,然后将现有数据重新插入表中。这将删除所有重复项。 – bsguy

+0

我已经中止了15分钟没有结果后,我想如果没有其他方式我会尝试tmp表。 – tttaaabbb