View a markdown version of this page

使用索引的最佳实践 - Amazon DocumentDB

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用索引的最佳实践

建立索引

将数据导入 Amazon DocumentDB 时,最好在导入大型数据集之前先创建索引。您可以使用 Amazon DocumentDB 索引工具从正在运行的 MongoDB 实例或 mongodump 目录中提取索引,然后在亚马逊文档数据库集群中创建这些索引。有关迁移的更多指导,请参阅迁移和升级亚马逊 DocumentDB

索引选择性

将索引创建限制为重复值数小于集合中文档总数的 1% 的字段。例如,如果您的集合包含 100,000 个文档,则仅在相同值出现 1,000 次或更少的字段上创建索引。

选择具有大量唯一值(即高基数)的索引可确保筛选操作返回少量文档,从而在索引扫描期间产生良好的性能。高基数索引的一个例子是一个唯一索引,它保证相等谓词最多返回单个文档。低基数的示例包括布尔字段上的索引和一周中某天的索引。由于其性能不佳,数据库的查询优化器不太可能选择低基数索引。同时,低基数索引继续消耗磁盘空间和等资源。 I/Os作为经验法则,应将索引定位于典型值频率为总集合大小的 1% 或更小的字段。

此外,建议仅在通常用作筛选条件的字段上创建索引,并定期查找未使用的索引。有关更多信息,请参阅 如何分析索引使用情况并识别未使用的索引?

索引对数据写入的影响

虽然索引可以通过避免扫描集合中的每个文档来提高查询性能,但这种提高是有代价的。对于集合的每个索引,每次插入、更新或删除文档时,数据库都必须更新集合并将字段写入集合的每个索引。例如,如果某个集合有九个索引,则数据库必须执行十次写入操作,才能将操作通知给客户端。因此,每增加一个索引都会产生额外的写入延迟 I/Os,并增加总存储利用率。

所以应该适当调整集群实例的大小,以确保将所有工作集容纳在内存中。这样就无需持续读取存储卷中的索引页面,这会对性能产生负面影响并产生更高 I/O 的成本。有关更多信息,请参阅 实例大小调整

为了获得最佳性能,请尽量减少集合中的索引数量,仅添加必要的索引来提高常用查询的性能。虽然工作负载会变化,但有一个很好的指导原则,就是将每个集合的索引数量保持在五个以内。

识别缺失的索引

最佳做法是定期识别缺失的索引。有关更多信息,请参阅 如何识别缺失的索引?

识别未使用的索引

最佳做法是定期识别和删除未使用的索引。有关更多信息,请参阅 如何分析索引使用情况并识别未使用的索引?