使用 $or 或 $in Cloudant 查询速度慢
Cloudant query slow speed using $or or $in
我有一个字段 "userid" 的索引设置。当我尝试使用 and $or 查询时,我得到了一个错误的请求。
query = cloudant.query.Query(db,selector={'$or':[{'userid': 35916}, {'userid': 11035}]},fields=['userid'])
首先添加“_id”可以正常工作,但首先获取所有文档的时间太长。
query = cloudant.query.Query(db,selector={'_id':{'$gt':0},'$or':[{'userid': 35916}, {'userid': 11035}]},fields=['userid'])
我在使用 $in 而不是 $or 时得到类似的结果。我缺少什么可以快速进行此查询?
为了它的价值,我创建了一个 "type": "json"
Cloudant 查询索引,并按照 http://python-cloudant.readthedocs.io/en/latest/getting_started.html 的 python-cloudant 文档编写了一些简单的测试代码。这段代码对我有用:
import cloudant
client = cloudant.Cloudant("username", "password", account="account_name")
client.connect()
session = client.session()
db = client['testdb']
query1 = cloudant.query.Query(db,selector={'$or':[{'userid': 35916}, {'userid': 11035}]},fields=['_id', 'userid'])
#query2 = cloudant.query.Query(db,selector={'_id':{'$gt':0},'$or':[{'userid': 35916}, {'userid': 11035}]},fields=['_id', 'userid'])
for doc in query1.result:
print doc
client.disconnect()
它returns:
{u'_id': u'266f9caae40012a04ce9223ccc67c8bd', u'userid': 35916}
{u'_id': u'5ff2cb156d16783492adb3eb8e2e0aec', u'userid': 11035}
我的观察:$or 和 $in 查询甚至抱怨找不到索引,即使在 _id 上查询并使用 _all_docs 索引也是如此。我认为这归结为数据库引擎内部的查询规划不是很好。我正在使用 CouchDB 2.0。
我有一个字段 "userid" 的索引设置。当我尝试使用 and $or 查询时,我得到了一个错误的请求。
query = cloudant.query.Query(db,selector={'$or':[{'userid': 35916}, {'userid': 11035}]},fields=['userid'])
首先添加“_id”可以正常工作,但首先获取所有文档的时间太长。
query = cloudant.query.Query(db,selector={'_id':{'$gt':0},'$or':[{'userid': 35916}, {'userid': 11035}]},fields=['userid'])
我在使用 $in 而不是 $or 时得到类似的结果。我缺少什么可以快速进行此查询?
为了它的价值,我创建了一个 "type": "json"
Cloudant 查询索引,并按照 http://python-cloudant.readthedocs.io/en/latest/getting_started.html 的 python-cloudant 文档编写了一些简单的测试代码。这段代码对我有用:
import cloudant
client = cloudant.Cloudant("username", "password", account="account_name")
client.connect()
session = client.session()
db = client['testdb']
query1 = cloudant.query.Query(db,selector={'$or':[{'userid': 35916}, {'userid': 11035}]},fields=['_id', 'userid'])
#query2 = cloudant.query.Query(db,selector={'_id':{'$gt':0},'$or':[{'userid': 35916}, {'userid': 11035}]},fields=['_id', 'userid'])
for doc in query1.result:
print doc
client.disconnect()
它returns:
{u'_id': u'266f9caae40012a04ce9223ccc67c8bd', u'userid': 35916}
{u'_id': u'5ff2cb156d16783492adb3eb8e2e0aec', u'userid': 11035}
我的观察:$or 和 $in 查询甚至抱怨找不到索引,即使在 _id 上查询并使用 _all_docs 索引也是如此。我认为这归结为数据库引擎内部的查询规划不是很好。我正在使用 CouchDB 2.0。