Cloudant查询选择错误的索引

时间:2017-06-08 20:21:24

标签: couchdb cloudant

我使用以下终点来查看cloudant正在选择哪个索引来获取我的结果:

https://mydb.cloudant.com/mlslistings-temp/_explain

这是一个选择了错误索引的示例查询:

{
 "sort": ["ListPrice"],
 "limit":20,
 "selector":{
     "Street#":"1031",
     "MLSStatus":{"$or":[{"$eq":"Active"}]},
     "ListPrice":{"$gte":0},
     "ParcelSizeAcres":{"$gte":0,"$lte":50}}
}

您在查询中看到的所有字段都是基于json的索引。 关于索引选择,我有两个问题:

  • 无论我选择哪个字段作为排序字段,都会自动选择为所选索引。它会很好,但主要是我的查询将是"ListPrice":{"$gte":0},最终会进行全表扫描,因为几乎所有属性的价格都大于0。
  • 如果我取出查询中的所有字段,并在查询中保留Street#ParcelSizeAcres,则会选择ParcelSizeAcres作为索引,但这是错误的。因为当我使用Street#运行查询时,总共会返回53个文档,而ParcelSizeAcres会返回数百个。

这些索引选择似乎与Cloudant's Explain Plans

相反

1 个答案:

答案 0 :(得分:0)

所有索引都包含一个字段。因此,就Cloudant而言,它们具有相同的权重,并且根据您所引用的文档,选择是按字典排序顺序排列的第一个可用索引,因此在第一种情况下,ListPrice和在第二种情况下,ParcelSizeAcres。这似乎与记录的行为一致。