- 我有两张表**
1.检查床位置
| 坐标|
| - ------|
| 28.08982880911016、-31.649963296195086|
1.餐桌位置
| 拉特|隆|地点|
| - ------|- ------|- ------|
| 28.08982880911016美元|-31.649963296195086|试验|
我想要一个MySQL(版本5.7.41兼容)查询,可以返回表1中的所有记录;但是,我不想显示存储的坐标值;相反,我想使用ST_Distance_Sphere或半正矢公式来检查每个坐标与最近的位置是否符合以下情况:
1.如果最近的值小于300米,则返回相应的地点值
1.如果最接近的值介于300米和1500米之间,则返回:"近"+对应处值+"~"+最近值(以米为单位)+"m"
1.如果最接近的值大于1500,则返回"N/A" 3。
请注意,我在表位置中有大约一百万条记录,因此我需要性能影响最小的最简单查询。
先谢了。
1条答案
按热度按时间nr9pn0ug1#
在所有
locations
和所有places
之间执行距离计算将是非常昂贵的,因此我们将创建一个边界框,该边界框可以使用可用索引来获得places
的子集,在该子集上执行距离计算。我们正在构建一个略大于我们感兴趣的1500m半径的边界框(考虑到不准确性):
以位置为中心的3.100 km x 3.100 km边界框开始连接。坐标然后对找到的实体进行点到点距离计算:
这个查询可以工作,但是它如何执行完全是另一回事。理想情况下,你应该有两个复合索引:
(lat, lon)
和(lon, lat)
,但至少具有其中一个是至关重要的,否则您将不断地进行表扫描。