空间索引和 ST_Geometry
根据所用 DBMS 的不同,用于 ST_Geometry 的空间索引的实现方式也不同。IBM Informix Spatial DataBlade 模块和 PostgreSQL 中的 ST_Geometry 应用使用 R 树索引来对空间数据进行索引。Oracle 和 DB2 中的 ST_Geometry 使用空间格网索引。
可以通过如下的方法创建空间索引:
- 对于格网索引,可在 ArcCatalog 的要素类属性 对话框的“索引”选项卡上单击添加。请参阅设置空间索引。
- 使用 sdelayer 管理命令实用工具。请参阅《ArcSDE 管理命令参考》。
- 使用 SQL。请参阅为包含 ST_Geometry 列的表创建空间索引。
- 使用 ArcSDE C 或 Java 应用程序编程接口 (API)。请参阅地理数据库资源中心。
- 使用 sdelayer 命令的 load_only_io 和 normal_io 操作,将要素类从只加载 I/O 模式切换回正常 I/O 模式。每次将要素类从 LOAD_ONLY_IO 模式切换为 NORMAL_IO 模式时,ArcSDE 都会自动删除并重新创建由 ArcSDE 创建的所有空间索引。
当对包含 ST_Geometry 列的表发出空间关系查询时,仅在执行某些空间关系函数时使用空间索引来加速查询进程。这些函数在何时使用空间索引?中列出。
Oracle
使用 ST_Geometry 存储方式创建的具有空间索引的要素类会在 Oracle 数据库中创建另一个表。此空间索引表的名称为 S<n>_IDX$,其中 <n> 是该表的几何索引值。可通过查询 SDE.ST_GEOMETRY_COLUMNS 表来获取该值。此空间索引表被创建为 Oracle 索引组织表 (IOT)。通过企业管理器查看时,ST_Geometry 属性的空间索引显示为 A<n>_IX1。值 <n> 表示存储在 LAYERS 表中的 LAYER_ID 值。
在 S<n>_IDX$ 表中还创建了另外两个索引:S<n>$_IX1 和 S<n>$_IX2。可以通过更改创建要素类时指定的 DBTUNE 配置关键字中的 S_STORAGE 参数来指定这些索引在 DBMS 中的存储方式。
如果创建包含 ST_Geometry 列的分区业务表,您还可能希望对空间索引进行分区。分区方法有如下两种:全局和局部。默认情况下,将对已分区业务表创建全局分区索引。要创建局部分区索引,则必须在 CREATE INDEX 语句的末尾添加关键字 LOCAL。为使 ArcGIS 能够在空间索引的 CREATE INDEX 语句末尾添加 LOCAL,请在 DEFAULTS 关键字下将 ST_INDEX_PARTITION_LOCAL 设置为 TRUE。
PostgreSQL
在 PostgreSQL 中,R 树索引使用通用搜索树 (GiST) 索引的结构实现。有关 GiST 索引的信息,请参阅 PostgreSQL 8.3 文档的第 51 章。
IBM DB2 和 Informix
有关 DB2 中空间索引的信息,请参阅由 DB2 Spatial Extender 生成的空间索引。有关 Informix 中空间索引的信息,请参阅Informix 中地理数据库 (geodatabase) 内的空间索引。