本部分介绍了 Cloud Firestore 企业版的索引编制功能。Cloud Firestore 企业版默认情况下不会创建任何索引。 为了降低费用并提高数据库性能,请为最常用的查询创建索引。
索引对数据库的性能有很大影响。如果查询存在索引,数据库可以通过减少需要扫描的数据量和减少对结果进行排序所需的工作量来高效地返回结果。不过,索引条目会增加存储费用,并增加在对编入索引的字段执行写入操作期间所做的工作量。
索引定义和结构
索引包含以下内容:
- 集合 ID
- 给定集合中的字段列表
- 每个字段的顺序(升序或降序)
索引排序
每个字段的顺序和排序方向用于唯一定义索引。例如,以下两个索引是不同的索引,不能互换:
| 集合 | 字段 |
|---|---|
| cities | 国家/地区(升序)、人口(降序) |
| cities | 人口(降序)、国家/地区(升序) |
创建用于支持查询的索引时,请按与查询相同的顺序添加字段。
索引密度
默认情况下,索引条目会存储集合中所有文档的数据。这称为非稀疏索引。无论文档是否包含索引中指定的任何字段,系统都会为该文档添加索引条目。在生成索引条目时,不存在的字段会被视为具有 NULL 值。如需更改此行为,您可以将索引定义为稀疏索引。
稀疏索引
稀疏索引只会将集合中至少有一个被编入索引字段包含值(包括 null)的文档编入索引。稀疏索引可降低存储费用并提高性能。
唯一索引
设置唯一索引选项,可强制确保编入索引的字段值是唯一的。对于多个字段上的索引,每个值组合在索引中都必须是唯一的。数据库会拒绝任何尝试创建具有重复值的索引条目的更新和插入操作。如果编入索引的字段的数据包含重复值,并且您尝试创建唯一索引,则索引构建会失败,并在操作详细信息中显示错误消息。
唯一索引中缺少字段
如果您插入的文档缺少唯一索引所需的字段,该索引会为这些缺少的字段设置 null 值。生成的索引条目必须是唯一的,否则操作会失败。
例如,使用此索引时:
| 集合 | 编入索引的字段 | 查询范围 |
|---|---|---|
| cities | 名称(升序) | 集合 |
如果您将文档 {"abbreviation": "LA"} 添加到集合中,唯一索引会创建一个条目,并将 name 设置为 null。如果您随后尝试添加文档 {"abbreviation": "NYC"},则操作会失败,因为生成的唯一索引条目是相同的。
相同的行为适用于包含多个字段的唯一索引。创建或更新文档时,缺少的编入索引的字段会设置为 null,并且生成的索引条目在索引中必须是唯一的。
排查索引构建错误
在管理索引时,您可能会遇到索引构建错误。如果数据库遇到数据问题,编入索引操作可能会失败。编入索引操作可能会由于以下原因而失败:
- 已达到索引限制。例如,操作可能已达到每个文档的索引条目数量上限。如果索引创建失败,您会看到一条错误消息。如果未达到索引限制,请重试编入索引操作。
- 您设置了唯一索引选项,但编入索引的字段的数据会创建重复的索引条目。如需继续,请从数据中移除重复的值组合。
后续步骤
了解如何创建和管理索引。