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

Encontrar lugares más cercanos usando tipo de datos de punto y st_distance_sphere en MySQL 8

puede ser la mejor solución. Primero obtengamos otras respuestas...

¿Qué significa EXPLAIN SELECT ... ¿decir? (Esto puede responder a su Q2).

Su consulta escaneará toda la tabla, independientemente de las otras respuestas. Quizás quieras LIMIT ... al final?

Otra cosa que podría ser útil (dependiendo de su aplicación y del Optimizador):agregue un cuadro delimitador a WHERE cláusula.

En cualquier caso, haga lo siguiente para tener una idea precisa de cuántas filas se tocan realmente:

FLUSH STATUS;
SELECT ...;
SHOW SESSION STATUS LIKE 'Handler%';

Vuelve con esas respuestas; entonces quizás podamos iterar más.

Después de MOSTRAR ESTADO

Bueno, Handler_read_rnd_next dice que fue un escaneo completo de la tabla. El 1000 y el 1001:¿tenías LIMIT 1000? ?

Deduzco que LIMIT no se tiene en cuenta en cómo SPATIAL obras. Es decir, hace lo simple:(1) verificar todas las filas, (2) ordenar, (3) LIMIT .

Entonces, ¿qué hacer?

Plan A:decida que no desea obtener resultados más allá de X millas (km) y agregue un "cuadro delimitador" a la consulta.

Plan B:abandonar Spatial y profundizar en una forma más compleja de realizar la tarea:http:// mysql.rjweb.org/doc.php/latlng