在我的oracle数据库中,有两个表,一个是出租车上车位置表,里面有两个字段,上车经度 onlon,上车纬度 onlat ,数据有 1700万条 , 另外一个是路段采样点表,表示道路上的一些点,也是两个字段,采样点的经度 roadpointlon, 采样点的纬度 roadpointlat,采样的距离是100米,数据量有5000条, 我要把出租车的上车位置匹配到采样点上,也就是每个上车位置,找离它最近的采样点。我先将每个上车点距离附近的采样点的距离求出来,下一步再选择最近的那个采样点,我的计算上车点距离附近的采样点的距离SQL语句如下所示:
select onlon,onlat,GetBaiduDistance(onlon,onlat,roadpointlon,roadpointlat) ondis , roadpointid
from T_BUSINESSHISTORYB, ROADPOINTAll where
(onlon) between (roadpointlon - 0.001020*2) and (roadpointlon + 0.001020*2) and
(onlat) between (roadpointlat - 0.000980*2) and (roadpointlat + 0.000980*2)
GetBaiduDistance 方法是给定两个位置,计算他们之间的直线距离。
我目前做了如下优化:
1、两个表的关键字段都建立了索引(plsql里面那种添加索引的方式添加的)
2、只选择上车点位置附近200米的sample point点计算他们之间的距离(然后再取最小值)。
问题就是由于我的数据量比较大,这个查询非常消耗时间(估计好几天才能出结果),我想请问一下对于我的这个问题有什么好点的解决方案么?因为时间关系,又不希望学习成本太大,希望有高手能指点。
select onlon,onlat,GetBaiduDistance(onlon,onlat,roadpointlon,roadpointlat) ondis , roadpointid
from T_BUSINESSHISTORYB, ROADPOINTAll where
(onlon) between (roadpointlon - 0.001020*2) and (roadpointlon + 0.001020*2) and
(onlat) between (roadpointlat - 0.000980*2) and (roadpointlat + 0.000980*2)
GetBaiduDistance 方法是给定两个位置,计算他们之间的直线距离。
我目前做了如下优化:
1、两个表的关键字段都建立了索引(plsql里面那种添加索引的方式添加的)
2、只选择上车点位置附近200米的sample point点计算他们之间的距离(然后再取最小值)。
问题就是由于我的数据量比较大,这个查询非常消耗时间(估计好几天才能出结果),我想请问一下对于我的这个问题有什么好点的解决方案么?因为时间关系,又不希望学习成本太大,希望有高手能指点。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货