在我的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点计算他们之间的距离(然后再取最小值)。
         问题就是由于我的数据量比较大,这个查询非常消耗时间(估计好几天才能出结果),我想请问一下对于我的这个问题有什么好点的解决方案么?因为时间关系,又不希望学习成本太大,希望有高手能指点。

解决方案 »

  1.   

      本身需求就是这样子的,因为我是要找到每个上车点最近的sample point,所以必须跟附近的sample point都进行比较。请问语句上面没有优化,有其他可以优化的方案吗?从数据库性能上。
      

  2.   

    你这个需求感觉oracle是搞不定,应该要用实时流计算技术,每来一个上车点,实时流入,传进计算。用oracle一下子求出上千的距离计算,计算量大太