我使用以下终点来查看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
相反答案 0 :(得分:0)
所有索引都包含一个字段。因此,就Cloudant而言,它们具有相同的权重,并且根据您所引用的文档,选择是按字典排序顺序排列的第一个可用索引,因此在第一种情况下,ListPrice
和在第二种情况下,ParcelSizeAcres
。这似乎与记录的行为一致。