Mongodb的复合(组合)查询怎么看explain?

浏览:33日期:2023-06-14

问题描述

Mongodb的版本:v3.4

db.h.reateIndex({’port’:1});db.h.reateIndex({’geo.city’:1});

在使用的时候

db.h.find({’port’:’80’,’geo.city’:’Taipei’},{’port’:1,’geo.city’:1,’geo.country’:1})

explain(’executionStats’)

'executionStats' : {'executionSuccess' : true,'nReturned' : 280952,'executionTimeMillis' : 10056,'totalKeysExamined' : 879232,'totalDocsExamined' : 879232,'executionStages' : {'stage' : 'PROJECTION','nReturned' : 280952,'executionTimeMillisEstimate' : 9763,'works' : 879233,'advanced' : 280952,'needTime' : 598280,'needYield' : 0,'saveState' : 6915,'restoreState' : 6915,'isEOF' : 1,'invalidates' : 0,'transformBy' : {'port' : 1,'geo.city' : 1,'geo.country' : 1,},'inputStage' : {'stage' : 'FETCH','filter' : {'geo.city' : {'$eq' : 'Taipei'}},'nReturned' : 280952,'executionTimeMillisEstimate' : 9246,'works' : 879233,'advanced' : 280952,'needTime' : 598280,'needYield' : 0,'saveState' : 6915,'restoreState' : 6915,'isEOF' : 1,'invalidates' : 0,'docsExamined' : 879232,'alreadyHasObj' : 0,'inputStage' : {'stage' : 'IXSCAN','nReturned' : 879232,'executionTimeMillisEstimate' : 466,'works' : 879233,'advanced' : 879232,'needTime' : 0,'needYield' : 0,'saveState' : 6915,'restoreState' : 6915,'isEOF' : 1,'invalidates' : 0,'keyPattern' : {'port' : 1},'indexName' : 'port_1','isMultiKey' : false,'multiKeyPaths' : {'port' : [ ]},'isUnique' : false,'isSparse' : false,'isPartial' : false,'indexVersion' : 2,'direction' : 'forward','indexBounds' : {'port' : [ '['80', '80']']},'keysExamined' : 879232,'seeks' : 1,'dupsTested' : 0,'dupsDropped' : 0,'seenInvalidated' : 0}}}

像上面的例子,除了端口使用了索引吗?还是两个都使用了,如果两个都使用了,那还要建立复合索引吗?谢谢

问题解答

回答1:

自己回答一下,上面有用到索引,但是只有一部分。如果建立复合索引,将会更快的搜索到。所以,组合搜索还是得用复合索引。

相关文章: