我有一个查询,它在两个字段上进行搜索:其中一个字段被索引,一个没有索引。
Mongo会通过首先在索引字段中搜索,然后再搜索其他未索引的搜索参数来做正确的事吗?
答案 0 :(得分:0)
这取决于。
如果您的[Microsoft.Windows.Appx.PackageManager.Commands.AppxPackage] $test = $null
正常,则将在索引字段上使用find
。您可以使用IXSCAN
如果您有汇总查询,并且第一阶段在未索引字段上匹配,而第二阶段使用索引字段,那么将不使用索引。您还可以在这里使用explain()
进行检查。
答案 1 :(得分:0)
答案可能是
MongoDB要做的是第一次看到特定的查询形状,它将运行简短的测试。
它确定可能用于服务查询的所有潜在索引计划,包括集合扫描。
然后,它们并行运行每个文件,限制为101个文档,101个工作单位或100毫秒。
每个计划的分数是测试期间找到的文档数量除以所需的工作单元数量。
在测试之后,任何完成的计划都将获得奖励积分,如果完成而无需进行内存中排序,则将获得额外的奖励积分。
然后将该计划缓存起来,以便下次看到相同形状的查询时可以重复使用。
您可以运行带有{allPlansExecution”选项的explain来查看所有已考虑的候选计划,以及每个计划的比较方式。
在大多数情况下,它会按预期选择索引,但是在某些情况下它不会选择索引,因此解释对于确定原因非常有用。