2014-03-06 66 views
1

我試圖在兩列上創建非空間索引,其中之一是幾何列(SDO_GEOMETRY)。從文檔看來,這是可能的,但我無法創建一個。Oracle中的非空間索引

從Oracle文檔的摘錄:

對於除POINT列在非空間索引的每個空間列,必須指定一個 柱前綴長度。 (這與索引的BLOB列的要求 相同)。前綴長度以字節爲單位給出。

以下是我正在試圖執行創建索引的查詢:

create index multiple_column_index on TestDB (ID, SHAPE) tablespace test; 

Shape列是幾何列在這裏。我收到的錯誤是:

SQL Error: ORA-02327: cannot create index on expression with datatype ADT 
02327. 00000 - "cannot create index on expression with datatype %s" 
*Cause: An attempt was made to create an index on a non-indexable 
     expression. 
*Action: Change the column datatype or do not create the index on an 
     expression whose datatype is one of VARRAY, nested table, object, 
     LOB, or REF. 

我沒有在這裏應用列前綴,因爲我找不到解釋其用法的任何文檔。

+0

爲什麼你需要將空間列添加到常規索引? –

+0

我試圖檢索特定屬性的空間數據。我想通過在空間列和屬性列上創建索引來查看性能。這在Oracle中可能嗎?我可以在PostgreSQL上做到這一點。 –

+1

Oracle SDO支持特殊的空間運算符或函數http://docs.oracle.com/cd/B28359_01/appdev.111/b28400/sdo_operat.htm#SPATL110。這使得在普通的索引中無用 - 這就是爲什麼Oracle不允許在那裏添加它們(no =,<>,<,>,!=可以用於ADT)。您應該在SDO列上創建空間索引。 –

回答

0

無法將空間列索引爲B樹索引的一部分。 如果您在其中一個表上有空間列 - 您必須在該列上創建空間域索引,才能使用空間函數。

沒有其他方法來索引這些列。

空間域索引非常複雜 - 創建它時有許多有趣的選項。 可以正確配置(並使用)這些索引,從而實現出色的性能。