ArcGIS 使用索引来快速查找数据。 属性索引用于查找与属性查询匹配的记录,而空间索引用于查找与空间查询匹配的要素。
属性索引可以在表、要素类、shapefile 或属性关系类上加速连接和其他属性查询。 属性索引是 ArcGIS 用于检索表中记录的备用路径。 对于大多数属性查询类型而言,使用索引查询记录要比从第一条记录开始逐条搜索整个表的方式更加快速。
现有表、要素类、 shapefile 或属性关系类中包含数据后,可为经常查询的列创建属性索引。 建议在包含唯一或几乎唯一值的列上创建索引。
添加的每个索引会稍微降低对要素类或表的编辑速度。 每次编辑包含属性索引的要素类或表时,ArcGIS 或数据库管理系统 (DBMS) 都会更新索引。 避免在编辑频率高于查询频率的列上创建索引,或者为包含很少不同值的列创建索引,因为这些索引可能会适得其反。 例如,在仅包含值“是”或“否”的列上创建索引不会提高查询性能。
您可以在 ArcGIS Pro 中的属性对话框中创建属性索引或使用添加属性索引地理处理工具创建属性索引。 添加索引后,可以随时删除或重新添加。
可为单个或多个列创建属性索引;属性索引可以唯一;对于某些地理数据库,可以按升序或降序创建属性索引。 本帮助页面简短介绍了这些概念。 如果您在为企业级地理数据库选择索引策略,请参阅 DBMS 文档来获取更详细的说明。
在目录窗格中创建属性索引
您可以通过右键单击目录窗格中的名称并访问属性对话框来为表、要素类、shapefile 或属性关系类中的单个或多个列创建属性索引。
注:
当您在 ArcGIS Pro 中打开属性表时,已建立索引的列的名称将带有星号 (*)。
- 在目录窗格中,右键单击要为其创建索引的表、要素类、shapefile 或属性关系类,然后单击属性。
- 单击索引选项卡。
属性索引部分显示了此数据集的现有索引。
注:
在 ArcGIS 中创建表或要素类时,ArcGIS 会向对象 ID 列添加一个唯一索引。 该索引在文件地理数据库和移动地理数据库中被命名为 FDO_OBJECTID。 在企业级地理数据库中,索引名为 r_#_sde_rowid_uk。 地理数据库使用的索引用于唯一标识每个要素或行,无法移除。
- 要添加属性索引,请单击添加。
- 对于名称,输入新索引的名称。
- (可选)如果字段值唯一,选中唯一复选框。 选中升序复选框可创建一个升序索引。
唯一和升序设置不适用于文件地理数据库,可以不选中。
- 从可用字段列表中,单击要为其构建索引的列,然后单击箭头将列移至所选字段列表。
要将索引应用于多个列,请对每个要索引的列重复此步骤。
- (可选)如果已选择多个列,使用上下箭头更改索引中列的顺序。
有关确定使用顺序的信息,请参阅下面的单列或多列索引部分。
- 单击确定构建索引。
- 单击确定关闭属性对话框。
使用地理处理工具创建属性索引
“数据管理”工具箱中的索引工具集提供了两个属性索引工具;一个用于创建属性索引,一个用于移除属性索引。
添加属性索引工具可向现有的表、要素类或属性关系类中添加单个或多列索引。
移除属性索引工具可从表、要素类或属性关系类中移除单个或多列索引。
属性索引名称
当命名索引时,指定的索引名称最好能够反映出索引的是哪个表或哪个列。 但是,如果索引表的名称发生变化,则索引名称可能不再指示当前索引的表。 某些组织可能发现为索引提供表示它是一个索引的名称很有用,例如将 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 上创建多列索引。 当所有三种类型的查询均经常发生,且对表的查询频率大于其更新频率时,使用这种方法才会有意义。