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