sql >> Base de Datos >  >> RDS >> Mysql

Consulta SQL para realizar una búsqueda por radio basada en la longitud de latitud

En mi opinión, la cláusula WHERE será lenta debido a las matemáticas involucradas, y el uso de funciones en la cláusula WHERE evitará que la base de datos use un índice para acelerar la consulta, por lo que, en efecto, examinará todos los restaurantes en el base de datos y realice las matemáticas del gran círculo en cada fila, cada vez que realice una consulta.

Personalmente, calcularía las coordenadas superior izquierda e inferior derecha de un cuadrado (que solo necesita calcularse crudamente usando Pitágoras) con lados iguales al rango que está buscando, y luego realizaría la prueba de la cláusula WHERE más complicada en el subconjunto más pequeño de registros que están dentro de ese cuadrado Lat/Long.

Con un índice de latitud y longitud en la base de datos, la consulta

WHERE     MyLat >= @MinLat AND MyLat <= @MaxLat
      AND MyLong >= @MinLong AND MyLong <= @MaxLong

debe ser muy eficiente

(Tenga en cuenta que no tengo conocimiento de MySQL específicamente, solo de MS SQL)