Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Znajdowanie najbliższych miejsc przy użyciu typu danych punktu i st_distance_sphere w MySQL 8

może być najlepszym rozwiązaniem. Najpierw zdobądźmy inne odpowiedzi...

Co oznacza EXPLAIN SELECT ... mówić? (To może być odpowiedzią na twoje drugie pytanie).

Twoje zapytanie przeskanuje całą tabelę, niezależnie od innych odpowiedzi. Być może chcesz LIMIT ... na końcu?

Kolejna rzecz, która może być przydatna (w zależności od aplikacji i Optymalizatora):Dodaj ramkę ograniczającą do WHERE klauzula.

W każdym razie wykonaj następujące czynności, aby dokładnie określić, ile wierszy zostało faktycznie dotkniętych:

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

Wróć z tymi odpowiedziami; wtedy być może będziemy mogli kontynuować iterację.

Po POKAŻ STATUS

Cóż, Handler_read_rnd_next mówi, że był to pełny skan tabeli. 1000 i 1001 -- czy masz LIMIT 1000 ?

Domyślam się, że LIMIT nie jest brane pod uwagę w jaki sposób SPATIAL Pracuje. Oznacza to, że jest to uproszczona rzecz -- (1) sprawdzanie wszystkich wierszy, (2) sortowanie, (3) LIMIT .

Więc co robić?

Plan A:Zdecyduj, że nie chcesz otrzymywać wyników dalej niż X mil (km) i dodaj „ramkę ograniczającą” do zapytania.

Plan B:Porzuć Spatial i przejdź do bardziej złożonego sposobu wykonania zadania:http:// mysql.rjweb.org/doc.php/latlng




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. NodeJS i mysql:czekaj na wynik zapytania

  2. SQL podziel wartości na wiele wierszy

  3. Wydajność sterownika XA w porównaniu ze sterownikiem JDBC innym niż XA?

  4. Jak pogrupować ciągłe zakresy za pomocą MySQL

  5. MySQL łączy dwa identyfikatory tabeli w celu uzyskania wyników z jednej tabeli do drugiej