sql >> Database >  >> RDS >> Mysql

Dichtstbijzijnde plaatsen zoeken met behulp van puntgegevenstype en st_distance_sphere in MySQL 8

Het mag de beste oplossing zijn. Laten we eerst wat andere antwoorden krijgen...

Wat doet EXPLAIN SELECT ... zeggen? (Dit kan uw vraag 2) beantwoorden.

Uw vraag scant de hele tabel, ongeacht de andere antwoorden. Misschien wil je LIMIT ... aan het einde?

Nog iets dat handig kan zijn (afhankelijk van je app en de Optimizer):voeg een selectiekader toe aan de WHERE clausule.

Doe in ieder geval het volgende om een ​​nauwkeurig idee te krijgen hoeveel rijen er daadwerkelijk worden aangeraakt:

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

Kom terug met die antwoorden; dan kunnen we misschien verder itereren.

Na TOON STATUS

Nou, Handler_read_rnd_next zegt dat het een volledige tafelscan was. De 1000 en 1001 -- had je LIMIT 1000 ?

Ik leid af dat LIMIT wordt niet meegenomen in hoe SPATIAL werken. Dat wil zeggen, het doet het simplistische -- (1) controleer alle rijen, (2) sorteer, (3) LIMIT .

Dus, wat te doen?

Plan A:besluit dat u geen resultaten wilt die verder dan X mijl (km) liggen en voeg een "begrenzingsvak" toe aan de zoekopdracht.

Plan B:verlaat Spatial en duik in een meer complexe manier om de taak uit te voeren:http:// mysql.rjweb.org/doc.php/latlng




  1. Bereken GEMIDDELDE uit 2 kolommen voor elke rij in SQL

  2. Android :Hoe kan ik gegevens naar MySQL DB sturen zonder JDBC , PHP of een andere webservice te gebruiken?

  3. Hoe SQLite-resultaten op te maken als een tabel

  4. WordPress – Achter de schermen, deel 2