Поиск дубликатов большой геопространственной базы данных

Я работаю с таблицей gemities maxmind ( см. Здесь), в MySQL (Windows).

Эта таблица содержит более 2,7 миллионов строк (что довольно много).

Я пытаюсь найти дубликаты городов (чтобы найти различное написание для каждого города, такого как pekin (fr), пекин...), следуя их долготе и широте.

Даже если я использую левое внешнее соединение, подзапрос или сложное предложение where, но время ответа слишком велико (оно никогда не заканчивается).

Вот моя последняя попытка:

select * 
from cities c1, cities c2 
where c2.longitude=c1.longitude 
and c2.latitude=c1.latitude 
and c2.cities!=c1.cities

У кого-нибудь есть идея?

1 ответ

Вы можете ускорить свой запрос, не выбирая * (Я думаю cities достаточно) и добавление индекса на cities(longtitude,latitude) или даже на cities(longtitude,latitude, cities), Вы также можете попробовать

SELECT longitude,latitude, COUNT(DISTINCT c.cities) as num_dup
FROM cities c
GROUP BY longitude,latitude
HAVING num_dup > 1
Другие вопросы по тегам