11

単純な MongoDB クエリを作成するときに、クエリ内の条件の順序について質問があります。たとえば、(Mongoose.js 構文):

conditions = { archived: false, first_name: "Billy" };

対。

conditions = { first_name: "Billy", archived: false };

..単純な find() 関数で:

User.find(conditions, function(err, users) { <some logic> });

..単純な単一キーのインデックス作成戦略を想定すると、次のようになります。

UserSchema.index( { first_name: 1, archived: 1} );

..上記の条件の順序は重要ですか?

重要:複合インデックスの順序が重要であることは知っていますが、上記のとおり、単一キー インデックス クエリに興味があります。私たちがここにいるので、完全に索引付けされていないクエリのケースにも興味があります。:)

ALTERNATE EXPLANATION:別の言い方をUserすれば、2 つの可能な内部 MongoDB 検索戦略を考えると、100 秒 (50 がアーカイブされ、50 がアーカイブされていない) と仮定します。

  1. 最初に 50 人のarchivedユーザーすべてをフィルターで除外し、残りの 50 人のアーカイブされていないユーザーをfirst_name「Billy」という値で検索します。
  2. 最初に 100 個のUserドキュメントすべてからfirst_name値 "Billy" を検索し、アーカイブされた Billy をすべて削除して、見つかったオブジェクトをフィルタリングします。

..#1の方が高速であると想定します(2つ以上の条件を持つ大規模なクエリでは、潜在的にはるかに高速です)。しかし、どちらが速いか、その理由に関係なく、確かにそのうちの 1 つです。

中心的な質問:複合インデックスの広大で強力な世界の外で、MongoDB は、どのフィールドとどの順序に関係なく、最もパフォーマンスが高く高速な検索/フィルターを自動的に実行する方法を知っていますか? それとも、システムにプログラム的に (提示された条件の順序などを介して) 何が最適かを伝える必要がありますか?

4

1 に答える 1