Я нахожусь в процессе преобразования плана запросов для 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
в другой части мира, фактический размер буфера немного отличается.
Точность не важна.Получающиеся местоположения не должны быть в пределах точного определенного расстояния от центральной точки.