2

私の現在のタスクとして、インデックスを最適化して、一部のクエリがより高速に実行されるようにする必要があります。私はこの記事を読みました: http://emptysqua.re/blog/optimizing-mongodb-compound-indexes/
この人が示唆しているように、私の最適なクエリは次の場合です:

 nscanned= nscannedObject = n  

まあ、私はそれを達成することができました。ただし、この式を満たすクエリは、満たさないクエリよりも遅いという問題があります。これが私の説明出力です:

{
    "cursor" : "BtreeCursor previous_sticky_1",
    "nscanned" : 65019,
    "nscannedObjects" : 65019,
    "n" : 65019,
    "millis" : 5456,
    "nYields" : 76,
    "nChunkSkips" : 0,
    "isMultiKey" : false,
    "indexOnly" : false,
}//everything is ok ( nscanned= nscannedObject = n ) 



  {
"cursor" : "BtreeCursor subnetInfo.giAddr_1",
"nscanned" : 65023,
"nscannedObjects" : 65023,
"n" : 65019,
"scanAndOrder" : true,
"millis" : 3355,
"nYields" : 37,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false

} // nscanned = nscannedObject > n しかし、「ミリス = 3355 < 5456」 ???

それはなぜですか?そして、どのインデックスを使用するのですか? subnetInfo.giAddr_1 または previous_sticky_1 ?

4

1 に答える 1

3

両方のヒントを使用してクエリを数回実行し、平均所要時間を計算する必要があります。この結果は、最初の実行時にインデックス ファイルを常駐メモリにページングする必要があったことに関係している可能性があります。タッチを使用して、この影響を排除します。

インデックスのメトリックは似ているため、どちらを使用しても大きな違いはないと思います。あなたが言及していないより関連性の高いものは、インデックスで使用するフィールドです。

于 2013-08-15T12:01:51.217 に答える