У меня есть таблица из 320000 строк, которая содержит координаты широты / долготы. Когда пользователь выбирает местоположение, моя программа получает координаты из выбранного местоположения и выполняет запрос, который приносит все точки из таблицы, которые находятся рядом. Это делается путем вычисления расстояния между выбранной точкой и каждой координатной точкой из строки моей таблицы. Это запрос, который я использую:
select street from locations
where ( ( (lat - (-34.594804)) *(lat - (-34.594804)) ) + ((lon - (-58.377676 ))*(lon - (-58.377676 ))) <= ((0.00124)*(0.00124)))
group by street;
Как видите, предложение WHERE представляет собой простую формулу Пифагора для вычисления расстояния между двумя точками.
Теперь моя проблема в том, что я не могу получить ИНДЕКС, чтобы его можно было использовать. Я пробовал с
CREATE INDEX indx ON location(lat,lon)
также с
CREATE INDEX indx ON location(street,lat,lon)
без удачи. Я заметил, что когда есть математическая операция с lat или lon, индекс не вызывается. Можно ли как-нибудь оптимизировать этот запрос для использования индекса, чтобы получить результаты скорости?
Заранее спасибо!