我只读过这样的或查询,例如:
find($or [{field1:a}, {field2:b}])应为每个字段创建索引(以字段作为前缀的简单或复合索引)。查询如下:
find(field1:a, field2:b)应建立一个复合索引,以全面覆盖该指数。但是,当查询有和‘s和OR在一起时,该怎么办?
find($or[field1:a, field2:b], field3:c, field4:d)在这种情况下,要创建的所有索引是什么?
MongoDB 4.4.6
发布于 2021-12-23 23:13:16
TL;DR:这里可能不需要复合索引,而是在基数最高、性能要求最高的查询上使用单独的字段索引。
当您的和模式是可预测的层次结构时,复合索引非常有用。如果在字段A、B、C上创建复合索引,则对A的查询将是快速的,A、B将是快速的,而A、B、C将是(真的)快速的。对B的查询不能使用索引,也不能使用B、C或C。
如果您使用explain(true)运行查询并检查输出,您将看到可以为$or和$and类型的查询使用多个索引。
https://stackoverflow.com/questions/70464631
复制相似问题