Azure cosmosdb ASC订单与DESC订单在性能上存在巨大差异
我在CosmosDB SQL API中记录了ORDER BY ASC和DESC之间的巨大差异。ASC在RUs的价格几乎比DESC低200倍 以下是我的测试工具的输出:Azure cosmosdb ASC订单与DESC订单在性能上存在巨大差异,azure-cosmosdb,azure-cosmosdb-sqlapi,Azure Cosmosdb,Azure Cosmosdb Sqlapi,我在CosmosDB SQL API中记录了ORDER BY ASC和DESC之间的巨大差异。ASC在RUs的价格几乎比DESC低200倍 以下是我的测试工具的输出: INFO ------------------- QUERY ----------------- SELECT TOP 100 * FROM root WHERE root.projectId = '783af8f2-8e2f-0083-5d86-2f60f34e11b4' AND NOT ARRAY_C
INFO ------------------- QUERY -----------------
SELECT TOP 100 * FROM root
WHERE
root.projectId = '783af8f2-8e2f-0083-5d86-2f60f34e11b4'
AND NOT ARRAY_CONTAINS(root.translatedLanguages, '0d42a87f-4d68-417b-99a9-a228cb63edce')
ORDER BY root._srtDue DESC
INFO ------------------- ROUND 1 -----------------
INFO Request Charge: 2532.53
INFO Count: 100
INFO Metrics: {
"TotalTime": "00:00:01.7036800",
"RetrievedDocumentCount": 38238,
"RetrievedDocumentSize": 236459696,
"OutputDocumentCount": 100,
"IndexHitRatio": 0.0,
"QueryPreparationTimes": {
"CompileTime": "00:00:00.0001900",
"LogicalPlanBuildTime": "00:00:00.0000700",
"PhysicalPlanBuildTime": "00:00:00.0000600",
"QueryOptimizationTime": "00:00:00.0000100"
},
"QueryEngineTimes": {
"IndexLookupTime": "00:00:00.0298500",
"DocumentLoadTime": "00:00:01.4093599",
"WriteOutputTime": "00:00:00.0001300",
"RuntimeExecutionTimes": {
"TotalTime": "00:00:00.2636001",
"SystemFunctionExecutionTime": "00:00:00.0132800",
"UserDefinedFunctionExecutionTime": "00:00:00"
}
},
"Retries": 0
}
vs
我还没有发现IndexHitRatio计算的准确程度,以及Cosmos DB执行的计划,但在我看来,在这种特殊情况下,它会以指定的顺序方向对文档运行谓词,而满足这些谓词的文档位于排序顺序的末尾,因此它必须读取大量文档,38K,获取前100个输出文档
我们相信我们都已正确编制了索引:
path": "/*",
"indexes": [
{
"kind": "Range",
"dataType": "Number",
"precision": -1
},
{
"kind": "Range",
"dataType": "String",
"precision": -1
}
]
...
"path": "/translatedLanguages/[]/?",
"indexes": [
{
"kind": "Range",
"dataType": "String",
"precision": -1
},
{
"kind": "Range",
"dataType": "Number",
"precision": -1
}
]
不幸的是,这种性能对于我们的用例是不可接受的,如果我们不以某种方式解决它,我们将被迫更改数据库引擎
是否有办法调整此执行计划以提高性能?这很可能是因为索引未用于查询。在代码段中,您已经在所有路径上定义了索引,但可能有一些列名称正在创建索引冲突。尝试仅为
\u srtDue
列创建单独的索引。Manish,索引冲突是如何可能的?相同的列名?我来自Cosmos DB工程团队。请将这两个查询的数据库帐户名、数据库名、集合名和ActivityID通过电子邮件发送给microsoft.com上的krishs,这很可能是因为索引未用于查询。在代码段中,您已经在所有路径上定义了索引,但可能有一些列名称正在创建索引冲突。尝试仅为\u srtDue
列创建单独的索引。Manish,索引冲突是如何可能的?相同的列名?我来自Cosmos DB工程团队。请将这两个查询的数据库帐户名、数据库名、集合名和活动ID通过电子邮件发送给microsoft.com上的krishs,好吗?
path": "/*",
"indexes": [
{
"kind": "Range",
"dataType": "Number",
"precision": -1
},
{
"kind": "Range",
"dataType": "String",
"precision": -1
}
]
...
"path": "/translatedLanguages/[]/?",
"indexes": [
{
"kind": "Range",
"dataType": "String",
"precision": -1
},
{
"kind": "Range",
"dataType": "Number",
"precision": -1
}
]