【发布时间】:2014-03-06 06:55:10
【问题描述】:
我正在尝试在两列上创建非空间索引,其中一列是几何列 (SDO_GEOMETRY)。从文档中可以看出这是可能的,但我无法创建一个。
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.
我没有在此处应用列前缀,因为我找不到任何解释其用法的文档。
【问题讨论】:
-
为什么需要将空间列添加到常规索引中?
-
我正在尝试检索特定属性的空间数据。我想通过在空间列和属性列上创建索引来查看性能。这在甲骨文中可能吗?我可以在 PostgreSQL 上做到这一点。
-
Oracle SDO 支持特殊空间运算符或函数docs.oracle.com/cd/B28359_01/appdev.111/b28400/…。这使得在普通索引中无用 - 这就是 Oracle 不允许在其中添加它们的原因(没有 =、、、!= 可用于 ADT)。您应该在 SDO 列上创建空间索引。
-
即使您可以将空间列添加到标准索引,我也看不出它会如何以任何方式提高性能。
-
您不能将空间列(数组数组)添加到 b 树。空间索引是 R-Trees,使用它们的代码大不相同。
标签: database oracle indexing spatial