我们说我有一个分片为{a:1,b:1}的集合。
除了分片键的索引,我还有一个{a:1, c :1, d :1}的索引 - 请注意分片键没有& #39; t为此索引添加前缀。
如果我只运行一个查询,只指定字段a,c和d的值,那么Mongo可以运行两个索引的组合来只查询正确的分片并使用第二个索引查询数据吗?或者这是不可能的(也许是因为只提供' a'不足以选择正确的分片)?
答案 0 :(得分:0)
如shard key indexes手册中所述,索引可以是分片键的索引,也可以是分片键是索引前缀的复合索引。
这意味着你必须有一个{a:1, b:1}
索引或其复合词,之前使用它作为分片键。
现在假设你有两个{a:1, c:1, d:1}
和{a:1, b:1}
的索引。您可以对查询运行.explain()以找出查询将使用哪个索引。另见Explain Results。
最后,仅仅因为查询无法使用分片键并不意味着无法执行。这只意味着mongos
将需要查询所有分片,因此略微次优。在查询中使用分片键时,它可以直接“跳转”到正确分片上的正确块。
您可能会发现Sharded Cluster Query Router有用的阅读材料。