我在我的CouchDB中存储了一个简单的类,其中包含以下数据:Definition类只包含一个点列表和附加的基本数据。
public class Geometry : CouchDocument
{
public Guid SyncId { get; set; }
public DateTimeOffset CreatedOn { get; set; }
public Definition Definition { get; set; }
}
在这个例子中,SyncId是一个唯一的id,我用它来识别我的软件的不同微服务中的几何结构。
我创建了一个索引,如下所示:
{
"index": {
"fields": [
"syncId"
]
},
"name": "sync-id-index",
"type": "json"
}
当我现在尝试使用$In操作符在CouchDB上运行一个查询,甚至只是执行syncid=X1 OR syncid=X2等操作时,它使用我创建的索引。然而,完成查询需要16秒。如果我删除索引,只需要4秒。
{
"selector": {
"syncId": {
"$in": [
"ca7be6e4-dc11-4ddf-99f3-c97f544bf998",
"716726b9-5493-498c-b207-d4b7e63f1ef3",
"cb6c4941-7b33-445b-8988-361930f9b39a",
"564fc2d5-3713-4b2b-b2e5-7dd79ef4509c",
"6c9845e3-39fa-4a3f-acb7-86a362665a13",
"15bb9836-3bd1-42b3-b12c-5a1025490d20",
"a0e15e75-292f-4c76-959f-8adc5e569a31",
"39b056bf-4ff9-4ada-9a44-9552801b52c4",
"20d9e3bf-3e32-4426-850a-86422771897a",
"9f262c8c-e493-4bec-9871-ed612a698a8c"
]
}
}
}
如何改进此查询的索引以提高性能并降低执行时间?
1条答案
按热度按时间wgx48brx1#
所以我用它作为文档的主键。
如果
syncId
是主键,可以考虑将其设置为CouchDB中的_id
字段。这将是迄今为止查询文档最有效的方式。然后,您可以发布到_all_docs
端点并指定要返回哪些键,这将非常有效。记住,还要设置"include_docs": true
以获取实际文档,而不仅仅是修订版本。大概是这样的:
有关_all_docs的更多信息