我正在尝试了解 RU 的工作原理,以便优化对数据库发出的请求。
我有一个简单的查询,其中按 id 选择
SELECT * FROM c WHERE c.id='cl0'
该查询花费 277.08
RU
然后我有另一个查询,我通过另一个属性进行选择
SELECT * FROM c WHERE c.name[0].id='35bfea78-ccda-4cc5-9539-bd7ff1dd474b'
该查询花费 2.95
RU
我不明白为什么这两个查询之间消耗的 RU 存在如此大的差异。
两个查询返回完全相同的结果
[
{
"label": "class",
"id": "cl0",
"_id": "cl0",
"name": [
{
"_value": "C0.Iklos0",
"id": "35bfea78-ccda-4cc5-9539-bd7ff1dd474b"
}
],
"_rid": "6Ds6AJHyfgBfAAAAADFT==",
"_self": "dbs/6Ds4FA==/colls/6Ds6DFewfgA=/docs/6Ds6AJHyfgBdESFAAAAAAA==/",
"_etag": "\"00007200-0000-0000-0000-w3we73140000\"",
"_attachments": "attachments/",
"_ts": 1528722196
}
]
最佳答案
我之前遇到过类似的问题,所以您不是唯一面临此问题的人。我为您提供两种解决方案。
1.sql SELECT * FROM c WHERE c.id='cl0'
在整个数据库中查询文档。如果您可以为正确的字段创建分区键,它将大大提高您的性能。
你可以引用这个doc了解如何选择分区键。
2.我在帖子中找到了以下答案:Azure DocumentDB Query by Id is very slow
Microsoft 支持人员做出了回应,并解决了该问题。他们为该集合添加了 IndexVersion 2。不幸的是,它还不能从门户获得,并且新创建的帐户/集合仍然没有使用新版本。您必须联系 Microsoft 支持人员才能对您的帐户进行更改。
我建议您提交反馈here追踪此公告。
希望对您有帮助。
-- 编辑
要升级到索引版本 2,请使用以下代码
var collection = (await client.ReadDocumentCollectionAsync(string.Format("/dbs/{0}/colls/{1}", databaseId, collectionId))).Resource;
collection.SetPropertyValue("IndexVersion", 2);
var replacedCollection = await client.ReplaceDocumentCollectionAsync(collection);
关于cosmosDB 上的 Azure RU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51756440/