我正在将locations
表上的SELECTS查询计划从基于haversine算法的搜索转换为依赖于POINT字段上的SPATIAL索引的搜索计划。迄今为止,我们在使用以下模式减少查询时间方面取得了令人难以置信的成功:
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
在具有3M记录的表上,以几毫秒为单位获得了距指定点约50英里以内的结果。
但是,我们需要能够稍微改变阈值以收集距给定点100英里或25英里等的结果。但是,据我了解,ST_BUFFER
的第二个参数需要度,而不是球面距离作为输入。
有什么方法可以动态设置ST_BUFFER
的第二个参数值,以便可以预测阈值?当我们在世界的其他地方尝试1.12
时,实际缓冲区大小略有不同。
精度并不重要。生成的位置不必在中心点的精确范围内。