sql >> データベース >  >> NoSQL >> MongoDB

インデックスが設定されているにもかかわらず、単純なMongoDBクエリが非常に遅い

    mongoが自動的に使用するインデックスがないため、全表スキャンを実行しています。

    ドキュメント で説明されているように

    理由

    a、bにインデックスがあり、aで検索する場合 単独で-インデックスが自動的に使用されます。これは、インデックスの開始であるため(これは高速です)、dbは残りのインデックス値を無視できます。

    a、bのインデックスは非効率的 bで検索する場合 「startswiththisfixedstring」でインデックス検索を使用する可能性がないという理由だけで。

    つまり、次のいずれかです:

    • クエリに_reference_1_idを含めます(おそらく無関係です)
    • または_reference_2_idにインデックスを追加します(フィールドで頻繁にクエリを実行する場合)
    • またはヒントを使用する

    ヒント

    おそらく今のあなたの最低コストのオプションです。

    _reference_1_id_1__reference_2_id_1_id_1を使用して強制するクエリヒントを追加します 索引。これは、全表スキャンよりもはるかに高速である可能性がありますが、クエリで使用しているフィールドで始まるインデックスよりもはるかに低速です。

    つまり、

    db.mycoll
        .find({"_reference_2_id" : ObjectId("jkl7890123456")})
        .hint("_reference_1_id_1__reference_2_id_1_id_1");
    


    1. 最新の値の結果に条件を追加

    2. Stackexchange.Redisのファイア・アンド・フォーゲットは配信を保証しますか?

    3. 人間が読める形式の日付形式でBSONをJSONに変換する方法

    4. mongoDB複数のフィールドに参加