地理数据库中的属性索引

在 Standard 或 Advanced 许可等级下可用。

ArcGIS 使用索引来快速查找数据。 属性索引用于查找与属性查询匹配的记录,而空间索引用于查找与空间查询匹配的要素。

属性索引可以在表、要素类、shapefile 或属性关系类上加速连接和其他属性查询。 属性索引是 ArcGIS 用于检索表中记录的备用路径。 对于大多数属性查询类型而言,使用索引查询记录要比从第一条记录开始逐条搜索整个表的方式更加快速。

现有表、要素类、shapefile 或属性关系类中包含数据后,可为经常查询的字段创建属性索引。 理想情况下,希望使用唯一或几乎唯一的值在列上创建索引。 仅创建实际所需的索引,因为添加的每个索引会稍微降低对要素类的编辑速度。 每次编辑包含属性索引的要素类时,ArcGIS 或 DBMS 将对索引执行维护。 避免在经常编辑的字段上或为包含极少相异值的字段(例如 YesNo)创建索引,因为这些索引可能会降低性能。

可通过在 ArcGIS Pro 中访问属性对话框或使用添加属性索引地理处理工具创建属性索引。 添加索引后,可以随时删除或重新添加。

可以不同的方式创建属性索引。 可为单个或多个字段创建索引;索引可以唯一;对于某些地理数据库,可以按升序或降序创建索引。 本主题仅简短介绍了这些概念。 如果您在为企业级地理数据库选择索引策略,请参阅 DBMS 文档来获取更详细的说明。

ArcGIS Pro 中创建属性索引

可以为数据集中的单个或多个字段创建属性索引,方法为右键单击目录窗格中的地理数据库要素类或表名称,然后访问属性对话框。

  1. 目录窗格中,右键单击要为其创建索引的表、要素类、shapefile 或属性关系类,然后选择属性
  2. 选择索引选项卡。

    “属性索引”部分显示了此数据集的现有索引。

    注:

    地理数据库创建并使用的 FDO_OBJECTID 索引用于唯一标识每个要素,无法移除。 单击 FDO_OBJECTID 时,Fields 部分将显示为其创建此索引的字段。

  3. 要添加新属性索引,单击添加
  4. 对于名称,输入新索引的名称。
  5. (可选)如果字段值唯一,选中唯一复选框。 选中升序复选框可创建一个升序索引。

    唯一升序设置不适用于文件地理数据库,可以不选中。 升序设置不适用于 OracleSQL Server

  6. 可用字段列表中,单击要为其构建此索引的一个或多个字段。
    注:

    文件地理数据库不支持多列索引。

  7. 单击右箭头按钮将一个或多个字段移动到选定字段列表中。
  8. (可选)如果已选择多个字段,使用上下箭头更改索引中字段的顺序。
  9. 单击确定构建索引。
  10. 单击确定关闭属性对话框。

使用地理处理创建属性索引

“数据管理工具”工具箱中的索引工具集提供了两个用来创建和移除属性索引的主要工具。

“数据管理”工具箱中包含的“索引”工具集

添加属性索引工具可向现有的表、要素类或属性关系类中添加单个或多列索引。 对于所有 ArcGIS 许可,此工具均可用;但如果您具有 ArcGIS Desktop Standard 或 Advanced 许可,则此工具仅适用于企业级地理数据库。

移除属性索引工具可从现有的表、要素类或属性关系类中移除单个或多列索引。 对于所有 ArcGIS 许可,此工具也都可用。

属性索引名称

当命名企业级地理数据库中的索引时,指定的索引名称最好能够反映出索引的是哪个表甚至哪个列。 但是,如果索引表的名称发生变化,则索引名称可能不再指示当前索引的表。 某些组织可能发现为索引提供表示它是一个索引的名称很有用,例如将 IDX 附加到名称开头或结尾。 例如,地址表索引的名称可以称为 ADRS_APK_IDX,其中 ADRS 表示此索引位于地址表中,APK 表示索引的是哪个列,IDX 明确表明这是一个索引。

与表名类似,索引名也要遵从以下要求:

  • 在数据库中必须唯一
  • 必须以字母开头
  • 不能包含空格
  • 不能包含保留字

对于在文件地理数据库内如何命名属性索引,没有任何限制。

ArcGIS 将属性索引名称的长度限制为 16 个字符。 此限制基于所支持的数据库内允许的最小长度,这样便于在不同地理数据库之间分发和共享数据。

唯一索引

创建索引时,系统会显示创建唯一索引选项。 如果属性在每个记录中具有唯一值,选择此选项。 这将加快对该属性的查询过程,因为数据库将在找到第一个匹配值后停止搜索。

注:

无法在包含在用户定义字段上具有唯一索引的另一个要素类的要素数据集中编辑要素类。

注:

“唯一”设置不适用于文件地理数据库,因此可以不选中此选项。

升序和降序索引

创建索引时,系统会显示创建升序索引选项,如果未选中该选项,会显示创建降序索引选项。 升序索引按升序保留。 例如,城市名称值 AthensBerlinLondonParis 将按该顺序显示在升序索引中,而在降序索引中,将显示为 ParisLondonBerlinAthens

在几乎所有情况下,索引的排列方向对检索速度几乎或完全没有影响,因为对于大多数查询,向前遍历索引的效率与向后遍历索引相同。

注:

“升序”设置不适用于 OracleSQL Server 或文件地理数据库,因此可以不选中。

单个索引与多列索引

文件地理数据库不支持多列索引。 属性对话框不允许指定多列索引。 通过添加属性索引工具,您可以指定多列索引,尽管您所创建的索引在从目录窗格的属性对话框中查看时显示为多列索引,但实际上它是每个字段的单独索引。

在地理数据库中可以为单个列或多个列创建索引。 如果经常在查询中同时执行两个或多个字段,将以使用多列索引。 在这种情况下,多列索引所提供的查询性能可能比使用两个或三个独立索引分别查询各个字段时快得多。

字段在多列索引中的显示顺序至关重要。 如果在多列索引中,列 A 位于列 B 前面,列 A 将用于执行初始搜索。 此外,与针对仅涉及 B 列的查询相比,此类索引更适用于针对仅涉及 A 列的查询。

要决定创建多列索引和/或单列索引,需要进行权衡,很难明确最佳决定。 通常,可以采用各种解决方案。 例如,如果您有时只查询 A 列、有时只查询 B 列、而有时又会同时查询这两列,您可以任选下列方法之一:

  • 为 A 和 B 创建两个单独的索引。
  • 在 A 和 B 上创建多列索引。 通常,当同时查询这两列时效率会更高。 对于仅涉及 A 的查询,该索引比索引仅在 A 上时速度慢。 该索引对于仅涉及 B 的查询作用不大。 为此,可以在 B 上创建附加索引。
  • 创建所有三个索引:在 A 和 B 上分别创建索引并在 A 和 B 上创建多列索引。 当所有三种类型的查询均经常发生,且对表的查询频率大于其更新频率时,使用这种方法才会有意义。