0

我有一个名为survey_data 的集合,其中包含以下字段

  1. topic_id
  2. 指标ID
  3. 人口编号

调查数据有超过 280 万条记录。我想从给定的一组 indicator_id 和 topic_id 的人口集合中获取人口。但是即使在为所有字段添加复合索引之后,下面的查询也需要 20 秒。

db.survey_data.find({"topic_id":60,"indicator_id":16)

我怎样才能提高性能?可能是对 rails3 使用“mongoid”的单个查询将是首选。

解释{“光标”:“BtreeCursor data_source_index”,“isMultiKey”:假,“n”:2261852,“nscannedObjects”:2261852,“nscanned”:2261852,“nscannedObjectsAllPlans”:2261852,“nscannedAllPlans”:2261852,“scanAndOrder” :假,“indexOnly”:假,“nYields”:21,“nChunkSkips”:0,“millis”:19952,“indexBounds”:{“data_source_id”:[[60,60]]}

调查数据索引:索引({data_source_id:1,data_source_year_id:1,indicator_id:1,indicator_option_id:1,country_id:1,provisions_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} ,{名称:“survey_data_index”,背景:真})

4

1 回答 1

1

要看的三件事:

  • topic_id 似乎不在您的索引中。
  • 尝试以与查询相同的顺序创建仅包含您正在查询的字段的索引。
  • 您需要一次抓取 100,000 条记录吗?如果您使用 limit 提取前 100 条记录,它会加快速度吗?

有一些关于查询调优的非常棒的资源。这里有一对:

于 2013-07-09T13:37:17.417 回答