Mysql
 sql >> Database >  >> RDS >> Mysql

Trovare i luoghi più vicini usando il tipo di dati point e st_distance_sphere in MySQL 8

può essere la soluzione migliore. Prima diamo qualche altra risposta...

Cosa significa EXPLAIN SELECT ... dire? (Questo potrebbe rispondere al tuo Q2).

La tua query analizzerà l'intera tabella, indipendentemente dalle altre risposte. Forse vuoi LIMIT ... alla fine?

Un'altra cosa che potrebbe essere utile (a seconda della tua app e dell'ottimizzatore):aggiungi un riquadro di delimitazione a WHERE clausola.

In ogni caso, procedi come segue per avere un'idea precisa di quante righe vengono effettivamente toccate:

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

Torna con quelle risposte; allora forse possiamo iterare ulteriormente.

Dopo SHOW STATUS

Bene, Handler_read_rnd_next dice che era una scansione completa della tabella. 1000 e 1001 -- avevi LIMIT 1000 ?

Deduco che LIMIT non viene preso in considerazione in come SPATIAL lavori. Cioè, fa la cosa semplicistica -- (1) controlla tutte le righe, (2) ordina, (3) LIMIT .

Allora, cosa fare?

Piano A:decidi che non desideri risultati superiori a X miglia (km) e aggiungi un "riquadro di delimitazione" alla query.

Piano B:abbandonare lo spazio e approfondire un modo più complesso per svolgere l'attività:http:// mysql.rjweb.org/doc.php/latlng