Mysql
 sql >> Base de données >  >> RDS >> Mysql

Recherche des lieux les plus proches à l'aide du type de données point et de st_distance_sphere dans MySQL 8

Il peut être la meilleure solution. Obtenons d'abord d'autres réponses...

Que signifie EXPLAIN SELECT ... dire? (Cela peut répondre à votre Q2).

Votre requête parcourra l'ensemble du tableau, quelles que soient les autres réponses. Peut-être voulez-vous LIMIT ... à la fin ?

Une autre chose qui pourrait être utile (en fonction de votre application et de l'optimiseur) :ajoutez un cadre de délimitation à WHERE clause.

Dans tous les cas, procédez comme suit pour avoir une idée précise du nombre de lignes réellement touchées :

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

Revenez avec ces réponses ; alors peut-être que nous pouvons itérer plus loin.

Après AFFICHER L'ÉTAT

Eh bien, Handler_read_rnd_next dit qu'il s'agissait d'un balayage complet de la table. Le 1 000 et le 1 001 -- aviez-vous LIMIT 1000 ?

J'en déduis que LIMIT n'est pas pris en compte dans la façon dont SPATIAL œuvres. Autrement dit, il fait la chose simpliste - (1) vérifie toutes les lignes, (2) trie, (3) LIMIT .

Alors, que faire ?

Plan A :Décidez que vous ne voulez pas de résultats plus éloignés que X miles (km) et ajoutez un "cadre de délimitation" à la requête.

Plan B :Abandonnez Spatial et explorez une manière plus complexe de faire la tâche :http:// mysql.rjweb.org/doc.php/latlng