我需要一些值去除重複行的表,只留下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)應該有幫助 –