技术开发 频道

MongoDB入门:从学习explain( )开始

  【IT168 技术】对于所有的操作来说,MongoDB几乎都有多种方法来检索所需的文档;对于所有的SQL语句,Oracle几乎都有多种方法检索所需的行。当Oracle解析一条SQL语句时,它必须决定使用哪种方法是最快的。确定数据的“非常好的”路径的过程称为查询优化。

  查询优化基础知识

  例如,请看下图的查询:

MongoDB学习入门:从explain(  )开始

  在FirstName、LastName、Phone和dob上存在索引。这为MongoDB解决查询提供了以下选择:

  1. 扫描整个集合,查找匹配所有条件的行,然后按dob对这些行进行排序。

  2. 使用FirstName上的索引查找所有“RUTH”,然后根据LastName和Phone过滤掉这些行,然后对dob上余下的进行排序。

  3. 使用LastName上的索引查找所有的“MARTINEZ”,然后根据FirstName和Phone过滤掉这些行,然后对dob上余下的进行排序。

  4. 使用Phone上的索引查找具有匹配电话号码的所有文件。然后消除不是RUTH MARTINEZ的人,然后按dob排序。

  5. 使用dob上的索引按照dob顺序对文档进行排序,然后删除任何不符合查询条件的文档。

  查询优化器决定采取方法。Explain()方法揭示了查询优化器的决策,并且在某些情况下可以检查其推理。

  开始使用Explain()

  想要查看explain输出,就要使用集合对象的explain()方法,并将find()、update()、insert()、drop()或aggregate()传递给该方法。例如,为了解释上面的查询,可以这样做:

MongoDB学习入门:从explain(  )开始

  由此产生的explainDoc对象是一个返回复杂JSON文档的游标。最重要的一点是winningPlan部分,可以像以下这样提取:

MongoDB学习入门:从explain(  )开始

  然而,可以看到这包含了多个查询执行阶段,每个阶段的输入都被嵌套为inputStage。如果您愿意的话,可以使用这个片段按顺序输出这些步骤(这对于大多数的计划来说都是适用的,但不适用于索引合并或共享集群):

MongoDB学习入门:从explain(  )开始

  这为执行计划提供了一个非常简洁的格式。以下是对每一步的解释:

MongoDB学习入门:从explain(  )开始


0
相关文章