使用Oracle的空间定位器

时间:2012-04-08 18:30:06

标签: oracle spatial

我可以运行以下查询但是当我交换sdo_nn的参数时,我得到SDO_NN的错误,如果不使用索引就无法评估

使用:

SELECT
c.customer_id,
c.first_name,
c.last_name,
sdo_nn_distance (1) distance
FROM stores s,
customers c
AND sdo_nn
(c.cust_geo_location, s.store_geo_location, 'sdo_num_res=1', 1)= 'TRUE'
ORDER BY distance;

不起作用:

SELECT
c.customer_id,
c.first_name,
c.last_name,
sdo_nn_distance (1) distance
FROM stores s,
customers c
AND sdo_nn
(s.store_geo_location,c.cust_geo_location, 'sdo_num_res=1', 1)= 'TRUE'
ORDER BY distance;

任何人都可以向我解释为什么序列很重要?

2 个答案:

答案 0 :(得分:0)

Oracle's online docs sdo_nn需要第一个参数进行空间索引。第二个参数没有那个必要性/约束。

因此,在交换参数时,您需要确保“now first”参数(即s.store_geo_location)在空间上被索引。有关如何在Oracle中创建空间索引的信息,请参阅this

答案 1 :(得分:0)

添加编译器提示以告诉查询解析器使用什么索引,例如:

select
/*+ index(tableName,sdoIndexName) */
...

警告编译器提示失败沉默