MongoDB: 将复合分片键与不同的复合索引组合

MongoDB: Combining compound shard key with different compound indexes

假设我有一个分片键为 {a:1, b:1} 的集合。

除了片键的索引,我还有一个索引 {a:1, c:1, d: 1} - 请注意分片键不作为此索引的前缀。

如果我 运行 查询仅指定字段 a、c 和 d 的值,可以 Mongo 运行 两个索引的组合以仅查询正确的分片和使用第二个索引查询数据?或者这是不可能的(可能是因为仅提供 'a' 不足以选择正确的分片)?

shard key indexes的手册所述,索引可以是分片键上的索引或复合索引,其中分片键是索引的前缀。

这意味着您必须有一个 {a:1, b:1} 或其组合的索引, 将其用作分片键之前。

现在假设您有两个索引 {a:1, c:1, d:1}{a:1, b:1}。你可以 运行 .explain() on a query to find out which index would be utilised by the query. See also Explain Results

最后,一个查询不能使用分片键并不意味着它不能被执行。这仅意味着 mongos 将需要查询所有分片,因此略微次优。当您在查询中使用分片键时,它能够 'jump' 直接到正确分片上的正确块。

您可能会发现 Sharded Cluster Query Router 有用的读物​​。