2012-04-08 5 views
2

Ich bin in der Lage, die unter Abfrage auszuführen, aber wenn ich die Parameter für sdo_nn tauschen, erhalte ich einen Fehler von SDO_NN kann nicht ohne IndexVerwendung räumlichen Locator für Oracle

Arbeiten bewertet werden Funktioniert nicht:

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; 

Jeder kann mir erklären, warum die Reihenfolge wichtig ist?

Antwort

0

Von Oracle's online docssdo_nn muss der erste Parameter räumlich indiziert werden. Der zweite Parameter hat diese Notwendigkeit/Beschränkung nicht.

Also, wenn Sie Parameter vertauschen, müssen Sie sicherstellen, dass der Parameter "jetzt zuerst" (d. H. s.store_geo_location) räumlich indiziert ist. Informationen zum Erstellen eines räumlichen Indexes in Oracle finden Sie unter this.

+0

Danke für die Antwort ausfallen. Ich habe beide indexiert, also verstehe ich nicht, wie es funktioniert, wenn vertauscht – user566375

+0

@ user566375 ein räumlicher Index ist nicht das gleiche ein normaler Index! Die Fehlermeldung besagt eindeutig, dass ein Index fehlt! – Yahia

+0

Ja, ich verstehe. Wenn ich die Gültigkeit des Index mit dem Befehl überprüfe, wählen Sie INDEX_NAME, TABLE_OWNER, TABLE_NAME, STATUS, ITYP_OWNER, ITYP_NAME, DOMIDX_STATUS, DOMIDX_OPSTATUS aus user_indexes, wobei ITYP_NAME nicht null ist; Es zeigt, dass beide Index gültig sind – user566375

0

den Compiler Hinweis Fügen Sie den Abfrageparser was Index zu sagen, z zu verwenden .:

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

WARNUNG Compiler Hinweise STILL