我需要一些值去除重复行的表,只留下1 我用这个查询增加执行时间的MySQL删除查询
DELETE n1 FROM cities_extended n1, cities_extended n2 WHERE n1.city_id > n2.city_id AND n1.city = n2.city
,但我的表大约有65000行,执行时间过很长,我不知道如何加快这一点。
我需要一些值去除重复行的表,只留下1 我用这个查询增加执行时间的MySQL删除查询
DELETE n1 FROM cities_extended n1, cities_extended n2 WHERE n1.city_id > n2.city_id AND n1.city = n2.city
,但我的表大约有65000行,执行时间过很长,我不知道如何加快这一点。
确保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`
使用交易。 – drescherjm
如果不是这样,也许你的mysql需要更好地调整。很多发行版都为现代PC提供了非常不理想的默认设置。 – drescherjm
这两个表上的多列索引(city_id,city)应该有帮助 –