我可以运行以下查询但是当我交换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;
任何人都可以向我解释为什么序列很重要?
答案 0 :(得分:0)
从Oracle's online docs sdo_nn
需要第一个参数进行空间索引。第二个参数没有那个必要性/约束。
因此,在交换参数时,您需要确保“now first”参数(即s.store_geo_location
)在空间上被索引。有关如何在Oracle中创建空间索引的信息,请参阅this。
答案 1 :(得分:0)
添加编译器提示以告诉查询解析器使用什么索引,例如:
select
/*+ index(tableName,sdoIndexName) */
...
警告编译器提示失败沉默