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