Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Finden von nächstgelegenen Orten mit Punktdatentyp und st_distance_sphere in MySQL 8

Es kann die beste Lösung sein. Lass uns zuerst ein paar andere Antworten bekommen...

Was bedeutet EXPLAIN SELECT ... sagen? (Dies könnte Ihre Frage 2 beantworten).

Ihre Abfrage durchsucht die gesamte Tabelle, unabhängig von den anderen Antworten. Vielleicht möchten Sie LIMIT ... am Ende?

Eine andere Sache, die nützlich sein könnte (abhängig von Ihrer App und dem Optimizer):Fügen Sie dem WHERE einen Begrenzungsrahmen hinzu Klausel.

Gehen Sie in jedem Fall wie folgt vor, um ein genaues Gefühl dafür zu bekommen, wie viele Zeilen tatsächlich berührt werden:

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

Kommen Sie mit diesen Antworten zurück; dann können wir vielleicht weiter iterieren.

Nach STATUS ANZEIGEN

Nun, Handler_read_rnd_next sagt, dass es sich um einen vollständigen Tabellenscan handelte. Die 1000 und 1001 – hatten Sie LIMIT 1000 ?

Daraus leite ich dieses LIMIT ab wird nicht berücksichtigt, wie SPATIAL funktioniert. Das heißt, es macht das Vereinfachte -- (1) alle Zeilen prüfen, (2) sortieren, (3) LIMIT .

Also, was tun?

Plan A:Entscheiden Sie, dass Sie keine Ergebnisse wünschen, die weiter als X Meilen (km) entfernt sind, und fügen Sie der Abfrage einen "Begrenzungsrahmen" hinzu.

Plan B:Geben Sie Spatial auf und suchen Sie nach einem komplexeren Weg, um die Aufgabe zu erledigen:http:// mysql.rjweb.org/doc.php/latlng