在 Standard 或 Advanced 许可等级下可用。
属性索引可以提高对要素类和表进行属性查询的速度。属性索引是 ArcGIS 用于检索表中记录的备用路径。对于大多数属性查询类型而言,使用索引查询记录要比从第一条记录开始逐条搜索整个表的方式更加快速。
只要要素类或表内有数据,您就可以为经常查询的字段创建属性索引。请只创建那些真正需要的索引,因为添加的每个索引都会略微降低要素类的编辑速度。每次编辑要素类时,ArcGIS 都必须更新索引。如果需要经常编辑某个字段,尽可能避免为其创建索引。 添加索引后,可以随时删除或重新添加。
可通过多种方法来创建属性索引。您可以为单个或多个字段创建属性索引;他们可以是唯一的;在某些地理数据库中,可以按升序或降序来创建属性索引。本主题仅对这些概念做简要说明。如果您在为地理数据库选择索引策略,请参阅 DBMS 文档来获取更详细的说明。
使用地理处理创建属性索引
“数据管理”工具箱中的“索引”工具集提供了两个用来创建和移除属性索引的主要工具。
“添加属性索引”工具可向现有的表、要素类或属性关系类中添加单个或多列索引。对于所有 ArcGIS 许可,此工具均可用;但如果您具有 ArcGIS for Desktop Standard 或 Advanced 许可,则此工具仅适用于企业级地理数据库。
“移除属性索引”工具可从现有的表、要素类或属性关系类中移除单个或多列索引。对于所有 ArcGIS 许可,此工具也都可用。
属性索引名称
当命名企业级地理数据库中的索引时,指定的索引名称最好能够反映出索引的是哪个表甚至哪个列。不过,对于被索引的表,如果其名称发生改变,您的索引名称可能无法再指示索引的是哪个表。一些组织发现,如果指定的索引名称中能够体现出它是一个索引(例如,在名称的开头或结尾添加 IDX),这样会很有用。例如,地址表索引的名称可以是 ADRS_APK_IDX,其中 ADRS 表示此索引位于地址表中,APK 表示索引的是哪个列,IDX 明确表明这是一个索引。
与表名类似,索引名也要遵从以下要求:
- 在数据库中必须唯一
- 必须以字母开头
- 不能包含空格
- 不能包含保留字
在 ArcGIS 中,属性索引名称的最大长度不得超过 16 个字符。此限制基于所支持的数据库内允许的最小长度,这样便于在不同地理数据库之间分发和共享数据。
唯一索引
当您创建索引时,会出现一个“创建为唯一索引”选项。如果每条记录中的属性都具有唯一值,请选择此选项。这将加快对该属性的查询过程,因为数据库将在找到第一个匹配值后停止搜索。
升序和降序索引
当您创建索引时,会出现“创建升序索引”选项,如果未选中此选项,则会出现“创建降序索引”选项。升序索引将按升序排列。例如,在升序索引中城市名以 Athens、Berlin、London 和 Paris 这种顺序排列,而在降序索引中它们则将显示为 Paris、London、Berlin 和 Athens。
在几乎所有情况下,索引的排列方向对检索速度几乎或完全没有影响,因为对于大多数查询,向前遍历索引的效率与向后遍历索引相同。
单个索引与多列索引
在地理数据库中可以为单个列或多个列创建索引。如果您经常在查询中同时指定两个或三个字段,则多列索引将十分有用。在这种情况下,多列索引所提供的查询性能可能比使用两个或三个独立索引分别查询各个字段时快得多。
字段在多列索引中的显示顺序很重要。在多列索引中,如果 A 列位于 B 列之前,则将使用 A 列执行初始搜索。此外,与针对仅涉及 B 列的查询相比,此类索引更适用于针对仅涉及 A 列的查询。
决定是创建多列索引或单列索引,还是同时创建两种形式的索引需要加以权衡,多数情况下难以做出最佳决定。不过,通常会有各种行之有效的解决办法。例如,如果您有时只查询 A 列、有时只查询 B 列、而有时又会同时查询这两列,您可以任选下列方法之一:
- 为 A 和 B 创建两个单独的索引。
- 为 A 和 B 创建一个多列索引。通常,当同时查询这两列时效率会更高。对于仅涉及 A 的查询,此索引将比单独的 A 索引慢。此索引对于只涉及 B 的查询来说作用不大。为此,您可以另外为 B 创建一个索引。
- 创建全部三个索引:一个 A 索引、一个 B 索引和一个 A 和 B 的多列索引。当所有三种类型的查询均经常发生,且对表的查询频率大于其更新频率时,使用这种方法才会有意义。