地理数据库中的空间索引

ArcGIS 使用空间索引来提高要素类的空间查询性能。识别要素、通过点选或框选来选择要素以及平移和缩放都需要 ArcGIS Pro 使用空间索引来查找要素。

在 ArcGIS 的地理数据库中创建空要素类或导入数据以创建要素类时,将为要素类创建空间索引。空间索引用于查询和编辑数据。

注:

一种例外情况是 Db2。在 Db2 的地理数据库中创建空要素类时,不会创建空间索引。

空间索引类型

数据源不同,空间索引也不同。以下地理数据库类型中的要素类使用基于格网的空间索引:

  • 文件地理数据库
  • Db2 中的地理数据库
  • Oracle 中的地理数据库(如果要素类包含 Esri ST_Geometry 列)

Oracle 中包含 Oracle Spatial (SDO_Geometry) 数据类型的要素类使用 R 树空间索引。

PostgreSQL 中的要素类使用通用搜索树 (GiST) 索引。

Microsoft SQL Server 中包含地理或地理空间列的要素类使用修改后的 B 树空间索引。几何空间列中的空间索引还存储边界框坐标。有关边界框的信息,请参阅 Microsoft SQL Server 文档。

ArcGIS 中的空间索引管理

ArcGIS 创建或重建空间索引的方式取决于地理数据库的类型,对于企业级地理数据库而言,则取决于所使用的数据库管理系统。接下来的两节将解释这些功能差异。

文件地理数据库中的空间索引

  • 在您创建要素类时,ArcGIS 会创建空间索引。
  • 如果将要素类从地理数据库中复制到文件地理数据库中,且源要素类使用基于网格的索引(Oracle Esri ST_Geometry、Db2 或文件地理数据库),则会将空间索引与源数据一起复制。如果源数据使用任何其他索引类型,则会在目标文件地理数据库中重建空间索引。
  • 压缩文件地理数据库要素类使用的空间索引类型与未压缩要素类中使用的空间索引类型不同。在压缩文件地理数据库要素类时,系统会自动重新构建索引。此索引无法修改。解压缩要素类时,将自动重新建立与压缩前要素类所具有的相同的空间索引。

企业级地理数据库中的空间索引

以下列表介绍了 ArcGIS 如何在每个受支持的数据库管理系统中管理地理数据库内要素类的空间索引:

  • Db2
    • 在您创建要素类时,ArcGIS 不会创建空间索引。
    • 在您将要素编辑内容保存在没有空间索引的要素类中时,才会创建空间索引。
    • 如果将要素类从地理数据库中复制到 Db2 内的地理数据库中,且源要素类使用基于网格的索引(Oracle Esri ST_Geometry、Db2 或文件地理数据库),则会将空间索引与源数据一起复制。如果源数据使用任何其他索引类型,则 ArcGIS 会根据被复制的要素在 Db2 内的目标地理数据库中创建空间索引。
  • Oracle
    • 在您创建要素类时,ArcGIS 会创建空间索引。
    • 在您将要素编辑内容保存在没有空间索引的要素类中时,才会创建空间索引。
    • 如果将要素类从地理数据库中复制到 Oracle 内的地理数据库中,且要素类使用 Esri ST_Geometry 类型,源要素类使用基于网格的索引(Oracle Esri ST_Geometry、Db2 或文件地理数据库),则会将空间索引与源数据一起复制。如果源数据使用任何其他索引类型,则 ArcGIS 会根据被复制的要素在 Oracle 内的目标地理数据库中创建空间索引。
  • PostgreSQL
    • 在您创建要素类时,ArcGIS 会创建空间索引。
    • 在您将要素编辑内容保存在没有空间索引的要素类中时,才会创建空间索引。
    • 如果将要素类从地理数据库中复制到 PostgreSQL 内的地理数据库中,则 ArcGIS 会根据被复制的要素在 PostgreSQL 中对要素类创建空间索引。
  • SQL Server
    • 在您创建要素类时,ArcGIS 会创建空间索引。
    • 在您将要素编辑内容保存在没有空间索引的要素类中时,不会创建空间索引。
    • 如果将要素类从地理数据库中复制到 SQL Server 内的地理数据库中,则 ArcGIS 会根据被复制的要素在 SQL Server 中对要素类创建空间索引。
  • SAP HANA 不使用空间索引来实现查询性能;因此,ArcGIS 不会创建或维护空间索引。

何时更新空间索引

对于 SQL Server 中使用几何空间类型的要素类,空间索引将使用在插入和删除要素时必须手动更新的边界框。要确定在 SQL Server 中何时需要重新计算要素类的空间索引,请使用要素类属性对话框中的验证操作

对于所有其他地理数据库和空间类型,您很少需要管理空间索引。但是,如果您在添加或删除大量要素后,发现空间查询性能下降,那么对受影响的要素类上重建 (Oracle) 或重新创建空间索引,可能会提高空间查询性能。