【问题标题】:Non spatial indexes in OracleOracle中的非空间索引
【发布时间】: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


【解决方案1】:

无法将空间列作为 B-Tree 索引的一部分进行索引。 如果您的一张表上有空间列 - 您必须在该列上创建空间域索引,才能使用空间函数。

没有其他方法可以索引这些列。

空间域索引非常复杂 - 创建它时有许多有趣的选项。 正确配置(和使用)这些索引可以获得出色的性能。

【讨论】:

    猜你喜欢
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    • 2021-10-24
    • 1970-01-01
    • 2019-04-26
    • 1970-01-01
    • 2019-11-28
    相关资源
    最近更新 更多