
# 联合索引概述
联合索引指的是包含两个属性或者多个属性的索引，又称为组合索引。工业数字模型驱动引擎-数据建模引擎（xDM Foundation，简称xDM-F）提供了三种高效易用的索引类型：普通索引、扩展属性普通索引、唯一索引、唯一索引忽略大小写、后模糊索引。您可以在数据模型"功能配置"页签下添加索引时，指定索引类型并添加索引属性。
- **普通索引**：是针对数据模型中一个或多个基础属性组合构建的非唯一性索引，允许索引字段（属性）的值存在重复，不强制数据唯一性。适用于以高频检索为目的、允许返回多条匹配记录的查询场景。例如，企业中存在同名员工，基于"姓名"基础属性创建普通索引后，执行姓名检索时，可返回所有匹配的员工数据记录。
- **扩展属性普通索引**：专用于数据模型中扩展属性的非唯一索引，支持在单个或多个扩展属性上建立组合索引，允许索引字段（属性）的值存在重复。适用于需要对动态扩展字段进行高效查询的场景。例如，"姓名"为数据模型的扩展属性，且企业存在同名员工，基于该属性创建扩展属性普通索引后，检索时可返回所有匹配的同名数据。其与普通索引的主要区别在于：索引所涉及的扩展属性必须归属于同一扩展表，且该索引仅在应用运行态生效，应用设计态不可见。
- **唯一索引**：用于确保数据模型中的某一个属性或者多个属性具有唯一值。此索引类型大小写敏感，即：如果两条记录的索引属性的值只有大小写不同，那么它们会被认为是不同的值。
- **唯一索引忽略大小写**：与唯一索引相同，也是用于确保数据模型中的某一个属性或者多个属性具有唯一值，但此索引类型大小写不敏感。当您需要在唯一索引中忽略大小写，可使用此类型。
- **后模糊索引** ：是一种针对**LIKE 'prefix%'**类前缀匹配查询进行优化的索引类型。通过构建特定的前缀索引结构，可以在手机号码前缀查找、分类编码快速检索以及订单编号前缀匹配等应用场景中，快速定位大规模数据中的目标记录，从而大幅提升查询效率。
#### 属性优先级
联合索引内属性具有优先级。属性优先级通过属性在列表中的位置来表示，列表顶端属性优先级最高，最先匹配；列表底端属性优先级最低。
#### 支持的范围
- 支持数据模型本身的属性。
- 支持从父模型继承的所有属性。
 
#### 不支持的范围
- 在应用设计态添加索引时，不支持选择RdmDeleteFlag和MasterId属性。
- 不支持JSON、文件、URL和长文本类型的属性。
- 选择"普通索引"时，如果属性的约束信息包含如下定义，则不支持。
  - "入库"为"否"的属性。
  
  - "多值"为"是"的属性。
  
  - "索引"为"是"的属性。
   
- 选择"唯一索引"时，如果属性的约束信息包含如下定义，则不支持。
  - "入库"为"否"的属性。
  
  - "多值"为"是"的属性。
  
  - "唯一键"为"是"的属性。
   
- 选择"唯一索引忽略大小写"时，如果属性的约束信息包含如下定义，则不支持。
  - "入库"为"否"的属性。
  
  - "多值"为"是"的属性。
  
  - "唯一键"为"是"的属性。
   
 
#### 联合索引与单索引的区别
表1联合索引与单索引的区别 
| 对比项   | 联合索引                                                                                                                                                                                                                                                                                                                                                                                                                                                    | 单索引                                                                                                                                                                                                                                                                                                                  |
|:---|:---|:---|
| 特点    | - 在两个属性或者多个属性上创建的索引，用于加快多个属性的联合查询、排序或过滤操作。  - 多条件查询时，联合索引使用最左匹配原则，快速定位至需要的数据行，提高查询效率。 例如，添加了3个属性的联合索引(a,b,c)，相当于添加了索引：(a)、(a,b)和(a,b,c)。    | - 在单个属性上创建的索引，用于加快对该属性的查询、排序或过滤操作。  - 多条件查询时，如果创建多个单索引，只会生效第一个创建的索引。   |
| 应用场景  | 适用于查询条件涉及多个属性的情况，例如根据用户ID和状态查找数据、根据多个属性的组合进行排序等。                                                                                                                                                                                                                                                                                                                                                                                                        | 适用于查询条件涉及单个属性的情况，例如根据用户ID查找用户、根据日期范围查询数据等。                                                                                                                                                                                                                                                                           |
| 应用设计态 | 支持在构建数据模型时，在"功能配置"页签中的"设置规则 \> 联合索引管理"进行定义。                                                                                                                                                                                                                                                                                                                                                                                                             | 支持在创建属性时，在"约束信息"中的"索引"进行定义。                                                                                                                                                                                                                                                                                          |
| 应用运行态 | 支持在"数据模型管理"中管理数据实体/关系实体时，在"功能配置"页签中的"设置规则 \> 索引管理"进行定义。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       ||
   
#### 约束与限制
- 在MySQL数据库类型的应用中，单张数据库表上创建的联合索引总数不能超过64个。
- 在应用设计态创建的联合索引，需依次完成"发布实体 \> 发布应用 \> 部署应用"的操作，才可在应用运行态创建数据实例时执行。
- 在应用运行态中，仅支持在"basicTenant"租户下管理索引，且应用运行态下创建的索引立即生效。
- 仅支持对"模型类型"为"实体模型"的自定义数据实体和关系实体配置联合索引。其中，"模型类型"为"实体模型"的单实体和M-V模型中的主对象支持设置所有索引类型，M-V模型中的版本对象和分支对象仅支持设置普通索引。
- xDM-F内置的联合索引不支持编辑和删除操作。
- 为了更好地管理和维护xDM-F应用的权限控制和策略配置，支持对xDM-F内置应用（XDM应用）的以下数据模型进行新增、删除、编辑及查看等联合索引管理的操作。
  - XDMUserGroup
  
  - XDMTeam
  
  - XDMRole
  
  - XDMTeamRole
  
  - XDMPolicySet
  
  - XDMUser
  
  - XDMTeamAndTeamRoleRelation
  
  - XDMPermission
  
  - XDMPolicyRule
  
  - XDMPermissionOperation
  
  - XDMPolicy
  
  - XDMPermissionAttribute
  
  - XDMPermissionAssignment
   
- "后模糊索引"仅在PostgreSQL数据库应用中可用，MySQL数据库应用不支持该索引类型。
 
