Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Encontrando lugares mais próximos usando tipo de dados de ponto e st_distance_sphere no MySQL 8


Ele pode ser a melhor solução. Vamos obter algumas outras respostas primeiro...

O que EXPLAIN SELECT ... dizer? (Isso pode responder ao seu Q2).

Sua consulta examinará toda a tabela, independentemente das outras respostas. Talvez você queira LIMIT ... no fim?

Outra coisa que pode ser útil (dependendo do seu aplicativo e do Optimizer):Adicione uma caixa delimitadora ao WHERE cláusula.

De qualquer forma, faça o seguinte para ter uma noção precisa de quantas linhas são realmente tocadas:
FLUSH STATUS;
SELECT ...;
SHOW SESSION STATUS LIKE 'Handler%';

Volte com essas respostas; então talvez possamos iterar ainda mais.

Após MOSTRAR STATUS

Bem, Handler_read_rnd_next diz que foi uma varredura completa da tabela. Os 1000 e 1001 -- você tinha LIMIT 1000 ?

Deduzo que LIMIT não é fatorado em como SPATIAL funciona. Ou seja, ele faz a coisa simplista -- (1) verifica todas as linhas, (2) classifica, (3) LIMIT .

Então o que fazer?

Plano A:decida que você não deseja resultados com mais de X milhas (km) e adicione uma "caixa delimitadora" à consulta.

Plano B:Abandone o Spatial e explore uma maneira mais complexa de realizar a tarefa:http:// mysql.rjweb.org/doc.php/latlng