代码之家  ›  专栏  ›  技术社区  ›  Stepan

Oracle spatial:SDO_NN在没有索引的情况下无法计算

  •  1
  • Stepan  · 技术社区  · 6 年前

    我有两张桌子 my_nodes restaurants 包含名称和 geoloc 数据我需要得到一个表,每个my_节点返回最近的餐厅以及从节点到餐厅的距离。

        select n.node_id, r.r_name , sdo_nn_distance(1) as min_distance from 
            (select nodeid as node_id, geoloc  from my_nodes@my_server ) n,
            (select r_name, GEOLOC from restaurants) r 
            where sdo_nn   (n.geoloc, r.GEOLOC,   'Unit = MILE sdo_num_res = 1', 1) = 'TRUE'
    

    上面的查询返回:

        ORA-13249: SDO_NN cannot be evaluated without using index
        ORA-06512: at "MDSYS.MD", line 1723
        ORA-06512: at "MDSYS.MDERR", line 17
        ORA-06512: at "MDSYS.PRVT_IDX", line 9
    

    如何修复它?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Littlefoot    6 年前

    你创建索引了吗?如果不是,语法如下:

    CREATE INDEX whichever_name_you_want
      ON table_name_here (sdo_geometry_column_name_here)
      INDEXTYPE IS MDSYS.SPATIAL_INDEX;
    

    由于我不是特别擅长空间,请看一下这个OTN论坛讨论: https://community.oracle.com/thread/3696687?start=0&tstart=0 ; 你可能会觉得很有趣。

    解决方案,一旦你达到它。祝你好运