1.索引介绍 mongodb的索引和我们遇到的rdbms的索引含义一样,原理也基本一样首先我们先在一个没有索引的集合上做一个查询,具体的查询计划可以通过explain()函数获取: db . t1 . find ({ username : user101 }). explain () { queryplanner : { plannerversion
1.索引介绍mongodb的索引和我们遇到的rdbms的索引含义一样,原理也基本一样首先我们先在一个没有索引的集合上做一个查询,具体的查询计划可以通过explain()函数获取:> db.t1.find({username:user101}).explain(){ queryplanner : { plannerversion : 1, namespace : suq.t1, indexfilterset : false, parsedquery : { username : { $eq : user101 } }, winningplan : { stage : collscan, filter : { username : { $eq : user101 } }, direction : forward }, rejectedplans : [ ] }, serverinfo : { host : mongodb1, port : 27017, version : 3.2.6, gitversion : 05552b562c7a0b3143a729aaa0838e558dc49b25 }, ok : 1}
如果要看详细的执行计划可以在explain添加executionstats或者allplansexecution> db.t1.find({username:user101}).explain(allplansexecution){ queryplanner : { plannerversion : 1, namespace : suq.t1, indexfilterset : false, parsedquery : { username : { $eq : user101 } }, winningplan : { stage : fetch, inputstage : { stage : ixscan, keypattern : { username : 1 }, indexname : username_1, ismultikey : false, isunique : false, issparse : false, ispartial : false, indexversion : 1, direction : forward, indexbounds : { username : [ [\user101\, \user101\] ] } } }, rejectedplans : [ ] }, executionstats : { executionsuccess : true, nreturned : 1, executiontimemillis : 0, totalkeysexamined : 1, totaldocsexamined : 1, executionstages : { stage : fetch, nreturned : 1, executiontimemillisestimate : 0, works : 2, advanced : 1, needtime : 0, needyield : 0, savestate : 0, restorestate : 0, iseof : 1, invalidates : 0, docsexamined : 1, alreadyhasobj : 0, inputstage : { stage : ixscan, nreturned : 1, executiontimemillisestimate : 0, works : 2, advanced : 1, needtime : 0, needyield : 0, savestate : 0, restorestate : 0, iseof : 1, invalidates : 0, keypattern : { username : 1 }, indexname : username_1, ismultikey : false, isunique : false, issparse : false, ispartial : false, indexversion : 1, direction : forward, indexbounds : { username : [ [\user101\, \user101\] ] }, keysexamined : 1, dupstested : 0, dupsdropped : 0, seeninvalidated : 0 } }, allplansexecution : [ ] }, serverinfo : { host : mongodb1, port : 27017, version : 3.2.6, gitversion : 05552b562c7a0b3143a729aaa0838e558dc49b25 }, ok : 1}
这里的执行计划是collscan表示集合扫描,我们给文件username创建一个索引,使用db.collectionname.ensureindex({colname:[1/-1]})来创建 --新版本中使用createindex来替换ensureindex其中1表示列的排序是从小大到排序,-1表示从大到小排序.> db.t1.ensureindex({username:1}){ createdcollectionautomatically : false, numindexesbefore : 1,
