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

Consulta SQL para realizar pesquisa de raio com base na longitude da latitude


Na minha opinião, a cláusula WHERE será lenta por causa da matemática envolvida, e o uso de funções na cláusula WHERE impedirá que o banco de dados use um índice para acelerar a consulta - então, na verdade, você examinará todos os restaurantes do banco de dados e execute a matemática do grande círculo em cada linha, toda vez que você fizer uma consulta.

Pessoalmente, eu calcularia as coordenadas TopLeft e BottomRight de um quadrado (que só precisa ser grosseiramente calculado usando pitágoras) com lados iguais ao intervalo que você está procurando e, em seguida, executar o teste de cláusula WHERE mais complicado no subconjunto menor de registros que estão dentro desse quadrado Lat/Long.

Com um índice em Lat &Long no banco de dados, a consulta
WHERE     MyLat >= @MinLat AND MyLat <= @MaxLat
      AND MyLong >= @MinLong AND MyLong <= @MaxLong

deve ser muito eficiente

(Por favor, note que eu não tenho conhecimento de MySQL especificamente, apenas de MS SQL)