删除哈希分片键索引
从MongoDB 7.0.3(以及6.0.12和5.0.22)开始,您可以删除哈希分片键的索引。
这可以加快使用哈希分片键分片的集合的数据插入速度。它还可以加快在使用mongosync
.
关于此任务
删除一个不必要的索引可以加快CRUD操作。每个CRUD操作都需要更新与文档相关的所有索引。删除一个索引可以增加所有CRUD操作的速度。
当您删除哈希分片键索引时,服务器将禁用该集合的平衡,并将该集合排除在未来平衡轮次之外。要再次将集合包含在平衡轮次中,您必须重新创建分片键索引。
重要
您只有在存在支持哈希分片键的非哈希索引的情况下,才应从集合中删除哈希分片键索引。如果分片键上不存在支持的非哈希索引,则按分片键过滤的查询将执行集合扫描。要查看集合上存在的索引,请使用 db.collection.getIndexes()
。
步骤
1
2
确认您的集合中没有孤儿文档
从 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
。