Azure cosmosdb ASC订单与DESC订单在性能上存在巨大差异

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

我在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_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
                }
            ]