1.分析查询性能db.collectionName.find(query.options).explain(options)
首先测试不给colletion加任何索引得到的结果
db.comment.find({userid:"1003"}).explain()
执行查询计划其中winningPlan为COLLSCAN即collection scan集合扫描
效果不是很明显,可以通过图形界面管理器compass来执行explain语句进行效果分析
首先要开启compass->collection(comment)->Explain Plan->输入{"userid:"1003"}->按钮EXPLAIN可以得到结果Documents Examined :4也就是和comment集合总数据条数一致,代表我们没有用上索引,没有性能提升的作用。
接着准备给commnet添加一个userid为升序的索引
db.comment.createIndex({userid:1})接着再去查询下索引情况
db.comment.find({userid:1}).explain()可以看到查询计划中的winningPlan -->indexBounds->userid
queryPlanner->winningPlain->state变成了fetch抓取数据了
再去执行compass中的执行一条查询语句explain看下效果
此时在建立了userid为索引的情况下去查询一条语句,得到的是1而不是4,性能在建立了索引后得到很大的提升,由于先执行的是IXSCAN查询到1条然后再去FETCH
2.涵盖的查询
即查询字段恰好包含在索引字段
Query covered by index