上边讲述了mongoDB中也可以用索引提高查询速度,并简单了解了如何利用explain去分析查询语句,需要注意的一点,查询条件key上有索引才会提高效率 。简单的字段索引,比如在name字段建立索引,用name查询时效率肯定块,不过 如果是同时用多个字段查询的时候,还能不能用上索引呢, 接下来,我们就去研究一下 ”复合索引“
1. 先引出问题
-
索引与查询字段的先后顺序有关么
比如下边的数据结构的document中, 我们对name字段建了一个索引,我们看一下通过age和name查询的时候,是否用上索引> db.peo.insertMany([{ name : 'abc',age : 14 },{ name : 'def',age : 16 }]) > db.peo.ensureIndex({ name:1}) > db.peo.find({ name:'abc','age':14}).explain()
这里只记录用的什么查询方式,
"winningPlan" : { "stage" : "FETCH", "inputStage" : { "stage" : "IXSCAN", indexName" : "name_1", ...
如果查询条件是 下边的,还能用到name索引么 , 发现结果是可以用的
> db.peo.find({ 'age':14,name:'abc'}).explain() "winningPlan" : { "stage" : "FETCH", "inputStage" : { "stage" :