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