2

以下のクエリを実行できますが、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;

シーケンスが重要な理由を誰でも説明できますか?

4

2 に答える 2

0

コンパイラ ヒントを追加して、使用するインデックスをクエリ パーサーに指示します。

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

警告コンパイラのヒントはサイレントに失敗します

于 2014-12-19T05:03:47.307 に答える
0

Oracle のオンライン ドキュメント からsdo_nn、最初のパラメータを空間的にインデックス化する必要があります。2 番目のパラメーターには、その必要性/制約はありません。

したがって、パラメーターを交換するときは、「今最初の」パラメーター (つまりs.store_geo_location) が空間的にインデックス付けされていることを確認する必要があります。Oracle で空間インデックスを作成する方法については、こちらを参照してください。

于 2012-04-08T18:36:31.460 に答える