Explain()を使用してシェルからmongoクエリを実行する場合、使用するインデックスの名前を取得してから同じクエリを再度実行しますが、hint()を使用して、使用する同じインデックスを指定します-explainplanの"millis"フィールドは大幅に減少
例えば
ヒントは提供されていません:
>>db.event.find({ "type" : "X", "active" : true, "timestamp" : { "$gte" : NumberLong("1317498259000") }, "count" : { "$gte" : 0 } }).limit(3).sort({"timestamp" : -1 }).explain();
{
"cursor" : "BtreeCursor my_super_index",
"nscanned" : 599,
"nscannedObjects" : 587,
"n" : 3,
"millis" : 24,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : true,
"indexOnly" : false,
"indexBounds" : { ... }
}
提供されるヒント:
>>db.event.find({ "type" : "X", "active" : true, "timestamp" : { "$gte" : NumberLong("1317498259000") }, "count" : { "$gte" : 0 } }).limit(3).sort({"timestamp" : -1 }).hint("my_super_index").explain();
{
"cursor" : "BtreeCursor my_super_index",
"nscanned" : 599,
"nscannedObjects" : 587,
"n" : 3,
"millis" : 2,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : true,
"indexOnly" : false,
"indexBounds" : { ... }
}
唯一の違いは「ミリス」フィールドです
なぜそれなのか誰か知っていますか?
更新:「使用するインデックスの選択」では説明されていません。mongoは、私が知る限り、X(100?)の実行ごとにインデックスを選択するため、次のヒント(X-1)と同じくらい高速である必要があります。実行します