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

At finde de nærmeste steder ved hjælp af punktdatatype og st_distance_sphere i MySQL 8

Det kan være den bedste løsning. Lad os først få nogle andre svar...

Hvad betyder EXPLAIN SELECT ... sige? (Dette kan svare på dit spørgsmål 2).

Din forespørgsel vil scanne hele tabellen, uanset de andre svar. Måske vil du have LIMIT ... til sidst?

En anden ting, der kan være nyttig (afhængigt af din app og optimeringsværktøjet):Føj et afgrænsningsfelt til WHERE klausul.

Under alle omstændigheder skal du gøre følgende for at få en præcis fornemmelse af, hvor mange rækker der faktisk røres:

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

Kom tilbage med de svar; så kan vi måske iterere videre.

Efter VIS STATUS

Nå, Handler_read_rnd_next siger, at det var en fuld bordscanning. 1000 og 1001 -- havde du LIMIT 1000 ?

Jeg udleder den LIMIT er ikke indregnet i, hvordan SPATIAL arbejder. Det vil sige, det gør det forsimplede -- (1) tjek alle rækker, (2) sorter, (3) LIMIT .

Så hvad skal man gøre?

Plan A:Beslut dig for, at du ikke vil have resultater længere end X miles (km), og tilføj en "grænseramme" til forespørgslen.

Plan B:Forlad Spatial og grav ned i en mere kompleks måde at udføre opgaven på:http:// mysql.rjweb.org/doc.php/latlng




  1. Sådan gemmer du kun tid; ikke dato og tid?

  2. FEJL:HHH000299:Kunne ikke fuldføre skemaopdatering java.lang.NullPointerException

  3. tælle datoforskel i timer ved hjælp af php og mysql

  4. Sådan nærmer du dig en Got minus en fra en læseopkaldsfejl, når du opretter forbindelse til en Amazon RDS Oracle-instans