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

フィールドの大きな組み合わせが存在する場合にMongoDBでインデックスを作成する正しい方法は何ですか

    一般に、インデックスは、選択的を超えている場合にのみ役立ちます。 分野。これは、特定の値を持つドキュメントの数が少ないことを意味します ドキュメントの総数と比較して。

    「小さい」とは、データセットとクエリによって異なります。インデックスが意味をなすかどうかを決定するとき、1%の選択性はかなり安全です。たとえば、ドキュメントの10%に特定の値が存在する場合、テーブルスキャンを実行する方が、それぞれのフィールドにインデックスを使用するよりも効率的です。

    そのことを念頭に置いて、一部のフィールドは選択的 いくつかはそうではありません。たとえば、「OK」によるフィルタリングはあまり選択的ではないと思います。インデックス作成の考慮事項から非選択フィールドを除外できます。他の条件がなくても「OK」であるすべての注文が必要な場合は、テーブルスキャンを実行することになります。 「OK」で他の条件の注文が必要な場合は、他の条件に適用できるインデックスが使用されます。

    選択的(または少なくともある程度選択的)なフィールドが残ったので、どのクエリが人気があり、選択的であるかを検討します。たとえば、おそらくブランドとタイプはそのような組み合わせになります。選択的であると予想される一般的なクエリに一致する複合インデックスを追加できます。

    さて、誰かがブランドのみでフィルタリングするとどうなりますか?これは、データに応じて選択的または非選択的である可能性があります。ブランド+タイプの複合インデックスがすでにある場合は、データベースに任せて、ブランドのみのクエリをブランド+タイプインデックスまたはコレクションスキャンのどちらで実行する方が効率的かを判断します。

    この方法で、他の一般的なクエリやフィールドを続行します。



    1. バインドパラメータはRedisで何をしますか?

    2. MongoDB$inクエリ演算子

    3. MongoDBインスタンスへのデータのインポート

    4. MongoDB:100のコレクションから10のランダムなドキュメントを見つける方法は?