2017-09-01 99 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