我试图找出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
}
]
答案 0 :(得分:1)
我以前也遇到过类似的问题,所以您不是唯一遇到此问题的人。我为您提供两种解决方案。
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);
答案 1 :(得分:0)
RU的使用量取决于您的文档大小和查询,我强烈建议您在下面的链接中查询指标。如果您想调整查询或要了解延迟,请查询查询Feed详细信息
x-ms-documentdb-query-metrics: totalExecutionTimeInMs = 33.67; queryCompileTimeInMs = 0.06; queryLogicalPlanBuildTimeInMs = 0.02; queryPhysicalPlanBuildTimeInMs = 0.10; queryOptimizationTimeInMs = 0.00; VMExecutionTimeInMs = 32.56; indexLookupTimeInMs = 0.36; DocumentLoadTimeMs = ved = 600; Timerie = 600; = 125; DocumentLoadTimeMins = ved8 = 0.008; DocumentLoadTimeMins = ved8 = 600; = 300; DocumentLoadTimeInMs = ved8; = 600; = 320 2000; writeOutputTimeInMs = 18.10; indexUtilizationRatio = 1.00 x-ms-request-charge:604.42
https://docs.microsoft.com/en-us/azure/cosmos-db/sql-api-sql-query-metrics