大家好日子,
我在构建以下更新时遇到了性能问题:
表POI(兴趣点)包含1000万条记录,包含经度和纬度字段(从OSM提取)
Table City包含世界上大多数城市的145,000条记录,还包含经度和纬度字段
我想将表POI中的外键City_ID(此字段中没有数据)与city表中的主ID相关联。完成后,我将能够将所有POI与城市相关联。我已经尝试过反向地理编码,但事实证明这是一次糟糕的经历,我不知道如何反转地理编码1000万条记录,因此我打赌将最近的城市带到每个POI。但似乎我的SQL查询在我的全新Macbook Pro 2015上带有16个演出或RAM。我在这里做的事情还不错......所有lat和long字段都在MySQL数据库中编入索引
我尝试过以下查询:
update poi
set (poi.city_ID, poi.distance) =
( select city.ID,
MIN(111.045* DEGREES(ACOS(COS(RADIANS(poi.latitude))
* COS(RADIANS(city.latitude))
* COS(RADIANS(poi.longitude) - RADIANS(city.longitude))
+ SIN(RADIANS(poi.latitude))
* SIN(RADIANS(city.latitude))))) AS distance_in_km
FROM city
)
Halp!
干杯
范数。
答案 0 :(得分:0)
对存储为浮点数的两个单独的lat和lon列进行索引无济于事。您需要利用数据库的空间特征,将纬度/经度位置存储在单个地理类型列中,并在该列上创建空间索引。有关MySQL空间特征的详细信息,请参阅此article。