může být nejlepším řešením. Pojďme nejprve získat nějaké další odpovědi...
Co znamená EXPLAIN SELECT ...
říci? (To může odpovědět na vaši otázku 2).
Váš dotaz prohledá celou tabulku bez ohledu na ostatní odpovědi. Možná chcete LIMIT ...
na konci?
Další věc, která by mohla být užitečná (v závislosti na vaší aplikaci a na Optimalizátoru):Přidejte ohraničovací rámeček do WHERE
doložka.
V každém případě proveďte následující, abyste získali přesný přehled o tom, kolika řádků se skutečně dotknete:
FLUSH STATUS;
SELECT ...;
SHOW SESSION STATUS LIKE 'Handler%';
Vraťte se s těmi odpověďmi; pak možná můžeme opakovat dále.
Po ZOBRAZIT STAV
Dobře, Handler_read_rnd_next
říká, že to byl úplný sken tabulky. 1000 a 1001 – měli jste LIMIT 1000
?
Z toho vyvozuji LIMIT
není zohledněno v tom, jak SPATIAL
funguje. To znamená, že dělá zjednodušenou věc -- (1) zkontrolovat všechny řádky, (2) seřadit, (3) LIMIT
.
Takže, co dělat?
Plán A:Rozhodněte se, že nechcete mít výsledky dále než X mil (km) a přidejte k dotazu „ohraničující rámeček“.
Plán B:Opusťte prostor a vrhněte se na složitější způsob provedení úkolu:http:// mysql.rjweb.org/doc.php/latlng