mongodb 3.0+ 查询性能分析

    为了演示的效果,我们先来创建一个有200万个文档的记录。(我自己的电脑耗了15分钟左右插入完成。如果你想插更多的文档也没问题,只要有耐心等就可以了。)

    MongoDB 3.0之后,explain的返回与使用方法与之前版本有了很大的变化,介于3.0之后的优秀特色和我们目前所使用给的是3.0.7版本,本文仅针对MongoDB 3.0+的explain进行讨论。

    3.0+的explain有三种模式,分别是:queryPlanner、executionStats、allPlansExecution。现实开发中,常用的是executionStats模式,主要分析这种模式。

    给这个person集合创建age键的索引:db.person.createIndex({"age":1})

    对queryPlanner分析

    对executionStats返回逐层分析

    第一层,executionTimeMillis

    最为直观explain返回值是executionTimeMillis值,指的是我们这条语句的执行时间,这个值当然是希望越少越好。

    其中有3个executionTimeMillis,分别是:

    第二层,index与document扫描数与查询返回条目数

    第三层,stage状态分析

    那么又是什么影响到了totalKeysExamined和totalDocsExamined?是stage的类型。类型列举如下:

    不希望看到包含如下的stage: