Tenho uma tabela que contém 10.301.390 registros de GPS, cidades, países e blocos de endereços IP. Eu tenho a localização atual do usuário com latitude e longitude. Eu criei esta consulta:
SELECT
*, point(45.1013021, 46.3021011) <@> point(latitude, longitude) :: point AS distance
FROM
locs
WHERE
(
point(45.1013021, 46.3021011) <@> point(latitude, longitude)
) < 10 -- radius
ORDER BY
distance LIMIT 1;
Esta consulta me deu com sucesso o que eu quero, mas é lento. Demorou 2 a 3 segundos para obter um registro por determinada latitude e longitude.
Eu tentei um índice B-Tree nas colunas latitude
e , também tentei, mas ainda assim a consulta é lenta.longitude
GIST( point(latitude, longitude));
Como posso acelerar esta consulta?
Atualizar:
Parece que a lentidão é causada pelo ORDER BY
mas eu quero obter a distância mais curta, então a questão permanece.