文档菜单
文档首页
/
MongoDB 手册
/ /

删除哈希分片键索引

本页内容

  • 关于此任务
  • 步骤
  • 了解更多

从MongoDB 7.0.3(以及6.0.12和5.0.22)开始,您可以删除哈希分片键的索引。

这可以加快使用哈希分片键分片的集合的数据插入速度。它还可以加快在使用mongosync.

删除一个不必要的索引可以加快CRUD操作。每个CRUD操作都需要更新与文档相关的所有索引。删除一个索引可以增加所有CRUD操作的速度。

当您删除哈希分片键索引时,服务器将禁用该集合的平衡,并将该集合排除在未来平衡轮次之外。要再次将集合包含在平衡轮次中,您必须重新创建分片键索引。

重要

您只有在存在支持哈希分片键的非哈希索引的情况下,才应从集合中删除哈希分片键索引。如果分片键上不存在支持的非哈希索引,则按分片键过滤的查询将执行集合扫描。要查看集合上存在的索引,请使用 db.collection.getIndexes()

1

运行以下命令以停止均衡器

sh.stopBalancer()

您只能在 mongos 上运行 sh.stopBalancer()。在 mongod 上运行 sh.stopBalancer() 会产生错误。

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

3

运行以下命令以删除索引

db.collection.dropIndex("<index name>")
4

运行以下命令以在集群上重启均衡器

sh.startBalancer()

返回

清除大键标志