Пытаюсь работать с гео-полями в MySQL, делаю запрос
SELECT * FROM `cities` WHERE ST_Distance(point(1,1), point) < 4
Поле point - содержит координаты точек пространственных координат. По этому полю сделан spatial индекс.
И вроде бы всё работает, но при попытке explain-а выдаёт, что keys = null и possible_keys = null. Я так понимаю, что это означает, что индекс не используется. Тем более, что запрос занимает очень много времени, 0.3 - 0.4 с.
Как заставить spatial индекс работать? Что я делаю не так?
Я так понял ST_Distance не работает с индексом.
Но вроде по-другому получилось:
SELECT name, ST_Distance(Point(3, 3), point) as distance FROM cities
WHERE ST_within( point, envelope( linestring( Point(5, 5), Point(1, 1) ))) having distance < 2
Point(3, 3) - центр квадрата, Point(5, 5), Point(1, 1) - диагональ квадрата. с помощью ST_within смотрится входит ли точка из поля point в этот квадрат ну и having отрезает уголки уже, которые нафиг не надо при помощи ST_Distance.