パフォーマンスmongodbを勉強しました。私は500百万の文書のコレクションを持っています。私は2つのインデックス作成:フィールド上のmongodb - 件数を改善する
db.appels.createIndex({OPERATEUR_RECEVEUR:1});
db.appels.createIndex({DUREE_APPEL:1});
数を、高速である:
15秒:
db.appels.find ({ "DUREE_APPEL" : { "$gt" : 42 } }).count();
2秒:
db.appels.find({OPERATEUR_RECEVEUR:"MTN"}).count();
しかし、2つのフィールドでカウント「and」は遅いです:
7分:
db.appels.find ({ $and : [ { "DUREE_APPEL" : { "$gt" : 42 } }, {OPERATEUR_RECEVEUR:"MTN"} ] }).count();
、「または」は不可能であるとの二つのフィールドを頼りに最後に
(これは、同じフィールドインデックスのない時間です):
15時間とクエリを殺します:
db.appels.find ({ $or : [ { "DUREE_APPEL" : { "$gt" : 42 } }, {OPERATEUR_RECEVEUR:"MTN"} ] }).count();
私は100の列を持つので、私はマルチインデックスを使用できません。私はdebian 8,2 SSD、80 Go Ram、12 Cpu、mongodb 2.4で1つのノードを使用します。どうすればスピードを上げることができますか?
なぜ2つのフィールドにインデックスを作成できませんか?あなたのケースでは、DUREE_APPELとOPERATEUR_RECEVEURです。ご回答いただきありがとうございます。https://docs.mongodb.com/manual/core/index-compound/ – Saleem
クエリや使用するフィールド数(時には1、場合によっては2、..、時には10)を事前に知ることはできません。 クエリは、Webインターフェイスのエンドユーザーの選択に従って動的に生成されます。 私は100の列がある場合、私は作成するために何千ものインデックスを持っています。 –
さて、あなたが先験的なことを知らないなら、私はすべてのフィールドにインデックスを作成することをお勧めします。私はあなたのインデックスが余分なリソースを使いますが、データを速く返すことでユーザーエクスペリエンスが向上することを知っています。 – Saleem