0

これはmongodb 2.0.4を使用しています。アップグレードを考えていますが、私たちのセットアップではアップグレードが容易ではないため、アップグレードせずにこれを修正できるかどうかを確認したいだけです.

「検索」部分が次のようになる更新クエリがたくさんあります。

timestamp:
{
    $gte: ISODate('xxxxx'),
    $lt: ISODate('xxxxx')
},
id: "string"
processed: false

これは基本的に、特定の ID の特定の日付範囲内のレコードを検索し、false から true に処理された更新を行います (これは「ワーカー」プロセスです)。

3 つのフィールドすべて (および _id) を含むインデックスを作成しようとしましたが、explain()それでもindexOnly: false. 奇妙なことに、indexBounds に対してもこれを返します。

"indexBounds" : {
    "processed" : [
        [
            false,
            false
        ]
    ]
}

誰かがこれを修正してmongodbがインデックスを適切に使用する方法(カバーインデックス)についてのヒントを教えてもらえますか、それとも日付範囲では単に不可能ですか?

4

1 に答える 1

0

重要なのは、3つのフィールドすべてを含むインデックスを作成するだけでなく、フィールドの順序を指定することです。

複合インデックスの使用方法の詳細については、この記事をお勧めします。

覚えておくべき主なことは、同等性をテストするフィールドは、範囲をテストするフィールドの前にある必要があるということです(特に、新しいバージョンで行われた最適化がない古いバージョンを使用しているため)。

于 2013-03-18T16:40:45.490 に答える