MySQL `ST_BUFFER` для сравнения с нечетким радиусом - PullRequest
0 голосов
/ 07 мая 2019

Я нахожусь в процессе преобразования плана запросов для SELECTS в нашей таблице locations из поиска на основе алгоритма haversine в тот, который опирается на SPATIAL-индекс в поле POINT.До сих пор мы добились невероятного успеха в сокращении времени запросов, используя следующую схему:

SELECT 
  ST_DISTANCE_SPHERE(geo_point, point('-97.13545999999', '32.69139300001')) AS distance, 
  id, 
  name
FROM locations
WHERE 
  ST_WITHIN(geo_point, ST_BUFFER(point('-97.13545999999', '32.69139300001'), 1.12))
ORDER BY distance ASC

Например, в этом запросе 1.12 дает нам результаты, которые находятся в пределах ~ 50 миль от указанной точки ввопрос нескольких миллисекунд в таблице с записями 3M.

Однако нам нужно немного изменить порог, чтобы получить результаты, которые находятся в 100 милях от заданной точки или 25 милях и т. Д. Но, насколько я понимаю, 2-й аргумент ST_BUFFER требуетградусы, а не сферическое расстояние в качестве входа.

Есть ли способ динамически установить значение 2-го аргумента ST_BUFFER, чтобы обеспечить предсказуемый порог?Когда мы пытаемся 1.12 в другой части мира, фактический размер буфера немного отличается.

Точность не важна.Получающиеся местоположения не должны быть в пределах точного определенного расстояния от центральной точки.

...