може бъде най-доброто решение. Нека първо получим някои други отговори...
Какво означава EXPLAIN SELECT ... казвам? (Това може да отговори на вашия Q2).
Вашето запитване ще сканира цялата таблица, независимо от другите отговори. Може би искате LIMIT ... на края?
Друго нещо, което може да е полезно (в зависимост от приложението ви и от оптимизатора):Добавете ограничаваща кутия към WHERE клауза.
Във всеки случай, направете следното, за да получите точна представа за това колко реда всъщност са докоснати:
FLUSH STATUS;
SELECT ...;
SHOW SESSION STATUS LIKE 'Handler%';
Върнете се с тези отговори; тогава може би можем да повторим по-нататък.
След ПОКАЗВАНЕ НА СТАТУСА
Е, Handler_read_rnd_next казва, че е било пълно сканиране на таблицата. 1000 и 1001 -- имахте ли LIMIT 1000 ?
Заключавам, че LIMIT не се взема предвид в това как SPATIAL върши работа. Тоест, той прави опростеното нещо -- (1) проверка на всички редове, (2) сортиране, (3) LIMIT .
И така, какво да правя?
План А:Решете, че не искате резултати по-далеч от X мили (км) и добавете „ограничаваща кутия“ към заявката.
План Б:Изоставете Spatial и копайте по-сложен начин за изпълнение на задачата:https:// mysql.rjweb.org/doc.php/latlng