根据所使用的 DBMS 不同,配合 ST_Geometry 使用的空间索引的实现方式也不同。Oracle 和 DB2 中的 ST_Geometry 使用空间格网索引。IBM Informix Spatial DataBlade 模块、PostgreSQL 中的 ST_Geometry 实现和 SQLite,使用 R 树索引为空间数据创建索引。在 SQLite 中,R 树索引为虚拟表。
可通过以下方式创建空间索引:
请注意,针对包含 ST_Geometry 列的表发出空间关系查询时,仅在执行特定的空间关系函数时,这些查询才会利用空间索引加快查询过程。这类函数在何时使用空间索引?中列出。
Oracle
使用 ST_Geometry 存储方式创建的具有空间索引的要素类会在 Oracle 数据库中创建另一个表。此空间索引表的名称为 S<n>_IDX$,其中 <n> 是该表的几何索引值。可通过查询 SDE.ST_GEOMETRY_COLUMNS 表来获取该值。此空间索引表被创建为 Oracle 索引组织表 (IOT)。通过企业 Manager 查看时,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 文档。
SQLite
SQLite 中的空间索引是用作 R 树索引的一组表。
IBM DB2 和 Informix
有关 DB2 和 Informix 中空间索引的信息,请参阅 IBM 文档。