2016-08-10 10 views
1

私のクエリは次のようになります。モンゴDBスロークエリ

db.Users.find({ 
    "Profile.Type" : { 
     "$ne" : NumberInt(4) 
    }, 
    "JoinDate" : { 
     "$gte" : ISODate("2016-08-09T23:00:00.000+0100"), 
     "$lte" : ISODate("2016-08-10T23:00:00.000+0100") 
    }, 
    "Category" : { 
     "$ne" : null 
    }}) 

それは実行に約8秒かかります - 長い時間のように思われます!データベースには約200万行があり、このクエリは約10,000に一致します。

私は.explainは()のようですので、私は言及代わりにインデックス(私は助けるべきであると思っていること)

{ 
    "Profile.Type" : 1.0, 
    "Category" : 1.0, 
    "JoinDate" : 1.0, 
    "Profile.ParentUserIds" : 1.0, 
    "Profile.AdminId" : 1.0 
} 

もちょうど

{ 
    "JoinDate" : 1.0 
} 

あるものを持っています...最初のインデックスではなく、2番目のインデックスを使用していることを示します。

アイデア?

答えて

0

試行ヒント()最初のインデックスを使用して、強制的にもパフォーマンスが改善されるかどうかを確認する(スキャンした文書の数が減少されるべきである)

db.Users.find({ 
    "Profile.Type" : { 
     "$ne" : NumberInt(4) 
    }, 
    "JoinDate" : { 
     "$gte" : ISODate("2016-08-09T23:00:00.000+0100"), 
     "$lte" : ISODate("2016-08-10T23:00:00.000+0100") 
    }, 
    "Category" : { 
     "$ne" : null 
    }}).hint({ 
     "Profile.Type" : 1.0, 
     "Category" : 1.0, 
     "JoinDate" : 1.0, 
     "Profile.ParentUserIds" : 1.0, 
     "Profile.AdminId" : 1.0 
    })