MongoDBの実行計画を見るときにRailsアプリとMongoMapper*1を使ってたらRailsコンソールで実行計画を見れたりします。pp
を使わないと見づらいです。
ざっくりした見方
winningPlan
が今回採用された実行計画、rejectedPlans
が採用されなかった計画*2executionStats
が実行ステータス、何件スキャンしたかとか実際ヒットしたのは何件かとか、実行時間とかが見れる
細かい見方とか勘所は以下を参照 mknkisk.github.io
?> pp User.collection.find({email: "kamatama41@example.com"}).explain {"queryPlanner"=> {"plannerVersion"=>1, "namespace"=>"example-db.users", "indexFilterSet"=>false, "parsedQuery"=>{"email"=>{"$eq"=>"kamatama41@example.com"}}, "winningPlan"=> {"stage"=>"FETCH", "inputStage"=> {"stage"=>"IXSCAN", "keyPattern"=>{"email"=>1, "_id"=>1}, "indexName"=>"email_1__id_1", "isMultiKey"=>false, "direction"=>"forward", "indexBounds"=> {"email"=> ["[\"kamatama41@example.com\", \"kamatama41@example.com\"]"], "_id"=>["[MinKey, MaxKey]"]}}}, "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, "needFetch"=>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, "needFetch"=>0, "saveState"=>0, "restoreState"=>0, "isEOF"=>1, "invalidates"=>0, "keyPattern"=>{"email"=>1, "_id"=>1}, "indexName"=>"email_1__id_1", "isMultiKey"=>false, "direction"=>"forward", "indexBounds"=> {"email"=> ["[\"kamatama41@example.com\", \"kamatama41@example.com\"]"], "_id"=>["[MinKey, MaxKey]"]}, "keysExamined"=>1, "dupsTested"=>0, "dupsDropped"=>0, "seenInvalidated"=>0, "matchTested"=>0}}, "allPlansExecution"=>[]}, "serverInfo"=> {"host"=>"example-db.com", "port"=> 27017, "version"=>"3.0.5", "gitVersion"=>"8bc4ae20708dbb493cb09338d9e7be6698e4a3a3"}, "executionTimeMillis"=>0}