我遇到了一个奇怪的问题。我有一个部分复合唯一索引,定义如下:
createIndex({a: 1, b:1, c: 1}, {unique:1, partialFilterExpression: {c: {$type: "string"}}})
现在,当我执行查询时,按照解释计划,这个索引从未被使用,即使有匹配查询的文档。
将相同的索引更改为稀疏索引而不是部分索引可以解决上述问题,但是稀疏复合唯一索引存在以下问题:dealing-with-mongodb-unique-sparse-compound-indexes
createIndex({a: 1, b:1, c: 1}, {unique:1, partialFilterExpression: {c: {$type: "string"}}})
现在,当我执行查询时,按照解释计划,这个索引从未被使用,即使有匹配查询的文档。
将相同的索引更改为稀疏索引而不是部分索引可以解决上述问题,但是稀疏复合唯一索引存在以下问题:dealing-with-mongodb-unique-sparse-compound-indexes
![Index Is Properly Created](https://istack.dev59.com/z52z6.webp)
![Query returns a document](https://istack.dev59.com/x9twZ.webp)
![Index is not Used](https://istack.dev59.com/ZTfD6.webp)
.explain(true)
在shell中查看完整结果。这可能会显示,即使索引被“考虑”,但为了单个结果而放弃了索引,而选择了集合扫描。 - Neil Lunnmongo
“shell”,并在这里包含“文本”输出,而不是图片。在帖子中阅读图片真的很困难,而“文本”则更加清晰,我们都可以复制和粘贴数据和输出。这也是您无法通过图片完成的另一件事。 - Neil Lunn