次のフィールドを持つ survey_data というコレクションがあります
- topic_id
- indicator_id
- 集団ID
survey_data には 280 万件を超えるレコードがあります。指定された indicator_id と topic_id のセットの人口コレクションから人口を取得したいと考えています。ただし、以下のクエリは、すべてのフィールドに複合インデックスを追加した後でも 20 秒かかります。
db.survey_data.find({"topic_id":60,"indicator_id":16)
どうすればパフォーマンスを向上させることができますか? rails3 の「mongoid」を使用した単一のクエリが推奨される場合があります。
{ "cursor" : "BtreeCursor data_source_index", "isMultiKey" : false, "n" : 2261852, "nscannedObjects" : 2261852, "nscanned" : 2261852, "nscannedObjectsAllPlans" : 2261852, "nscannedAllPlans" : 2261852, "scanAndOrder" : false, "indexOnly" : false, "nYields" : 21, "nChunkSkips" : 0, "millis" : 19952, "indexBounds" : { "data_source_id" : [ [ 60, 60 ] ] }
SurveyData インデックス: index({data_source_id: 1, data_source_year_id: 1, indicator_id: 1, indicator_option_id: 1, country_id: 1, Provinces_state_id: 1, health_regions_id: 1, health_regions_type_id: 1, other_administrative_boundary_id: 1, sub_population_options_id: 1, reportability_id: 1} , {name:"survey_data_index", background: true })