删除哈希分片键索引
从 MongoDB 7.0.3(以及 6.0.12 和 5.0.22)开始,您可以删除哈希分片键的索引。
这可以加快使用哈希分片键分片的集合的数据插入速度。在使用 mongosync
时,这还可以加快数据摄取速度。
关于此任务
删除不必要的索引可以加快CRUD操作的速度。 每个CRUD操作都必须更新与文档相关的所有索引。 删除一个索引可以提高所有CRUD操作的速度。
重要
仅当存在针对分片键的支持性非哈希索引时,才应从集合中删除哈希分片键索引。 如果分片键上不存在支持的非哈希索引,则按分片键的查询将执行集合扫描。要查看集合上存在哪些索引,请使用db.collection.getIndexes()
。
Considerations
删除哈希分片键索引时,请考虑以下事项:
服务器会为您的集合禁用负载均衡,并从未来的负载均衡轮次中排除该集合。要将该集合包含在未来的均衡轮次中,请重新创建分片键索引。
删除分片键索引时,范围删除器不会清除集合中任何剩余的孤立索引。在删除哈希分片键索引之前,必须确认集合中不存在孤立文档。有关如何确认集合中没有孤立文档,请参阅以下过程。
步骤
1
2
确认collection中没有孤立文档
从 MongoDB 6.0.3 开始,您可以使用$shardedDataDistribution
阶段运行聚合,以确认没有剩余孤立文档:
db.aggregate([ { $shardedDataDistribution: {} }, { $match: { "ns": "<database>.<collection>" } } ])
$shardedDataDistribution
的输出类似于以下内容:
[ { "ns": "test.names", "shards": [ { "shardName": "shard-1", "numOrphanedDocs": 0, "numOwnedDocuments": 6, "ownedSizeBytes": 366, "orphanedSizeBytes": 0 }, { "shardName": "shard-2", "numOrphanedDocs": 0, "numOwnedDocuments": 6, "ownedSizeBytes": 366, "orphanedSizeBytes": 0 } ] } ]
确保集群中每个分片的 "numOrphanedDocs"
为 0
。