поиск lat long с mysql с пространственным - PullRequest
0 голосов
/ 13 марта 2012

Использование mysql db.У меня есть столбец "latlong", который является типом точки с пространственным индексом.Я хотел бы получить ближайшие местоположения в 4 милях от широты и долготы.

Пока у меня есть это ...

SELECT `postcode`,county, ( 3959 * acos( cos( radians(51.585738) ) * cos( radians( x(GeomFromText(astext(latlong))) ) ) * cos( radians( y(GeomFromText(astext(latlong))) ) - radians(-0.260878) ) + sin( radians(51.585738) ) * sin( radians( x(GeomFromText(astext(latlong))) ) ) ) ) AS distance  
FROM uk_p HAVING distance < 4 ORDER BY distance LIMIT 0 , 20

У меня всего 2900 записей, и это занимает примерно0,0277 с.Есть ли способ оптимизировать этот запрос, так как я обеспокоен тем, что по мере роста базы данных, чем медленнее будет этот запрос ...

Ответы [ 2 ]

0 голосов
/ 06 сентября 2013

Ваш запрос подходит для 2900 записей.Для большого набора данных вы можете использовать диапазонные запросы с ограничительной рамкой, окружающей центр.Смотрите ответ в этот вопрос .

0 голосов
/ 14 марта 2012

Вы можете выбрать один из двух подходов: один - предварительно рассчитать преобразования в радианы и триггерные функции и сохранить результаты в новых столбцах таблицы - это избавит вас от выполнения части работы, которая не меняется длякаждый почтовый индекс.Вам все равно придется вычислять расстояние до вашей цели, и вы ничего не можете с этим поделать, поскольку вы, вероятно, хотите, чтобы она работала с любой произвольной целью.

Другой подход должен быть менее точным.Если вы работаете с достаточно небольшой областью, которая не находится рядом с одним из полюсов, вы можете предположить, что мир плоский (серьезно), и использовать математическую систему декартовых координат вместо сферического триггера.

Или, чтобы объединить два подхода, вы можете сделать одноразовое сопоставление всех ваших почтовых индексов в прямолинейной сетке и поверить, что это приближение достаточно для ваших целей.Это будет работать лучше всего, если вы имеете дело с относительно небольшим географическим районом.

Другими словами, вам не нужно общее решение (которое вы используете сейчас), если вы можете сделать некоторые предположения о вашей конкретнойдомен.

...