Задать вопрос
@Hitsuzen

Как заставить работать spatial-индекс?

Пытаюсь работать с гео-полями в 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.
  • Вопрос задан
  • 293 просмотра
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
opium
@opium
Просто люблю качественно работать
До версии 5.7.5 spatial index работает только для таблиц MYISAM
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы