为什么按时间戳(字符串)排序的 Azure Cosmos 查询比按 _ts(内置)排序的成本高得多?

imb*_*eek 5 azure azure-cosmosdb

此查询花费 265 RU/s SELECT top 1 * FROM c WHERE c.CollectPackageId = 'd0613cbb-492b-4464-b66b-3634b5571826' ORDER BY c.StartFetchDateTimeUtc DESC

StartFetchDateTimeUtc是一个字符串属性,使用 Cosmos API 序列化

此查询花费 5 RU/s SELECT top 1 * FROM c WHERE c.CollectPackageId = 'd0613cbb-492b-4464-b66b-3634b5571826' ORDER BY c._ts DESC

_ts是一个内置字段,一个基于 Unix 的数字时间戳。

结果示例(仅包含该字段和_ts): "StartFetchDateTimeUtc": "2017-08-08T03:35:04.1654152Z", "_ts": 1502163306

索引已就位,并遵循如何配置可排序字符串/时间戳的建议和教程。看起来像: { "path": "/StartFetchDateTimeUtc/?", "indexes": [ { "kind": "Range", "dataType": "String", "precision": -1 } ] }

Bra*_*ang 3

根据本文项目大小、项目属性计数、数据一致性、索引属性、文档索引、查询模式、脚本使用”变量将影响 RU。

所以很奇怪的是不同的财产花费不同的RU。

我还在我这边创建了一个测试演示(使用您的索引和相同的文档属性)。我已将 1000 条记录插入到 documentdb 中。两个不同的查询花费相同的 RU。我建议你可以开始一个新的集合并再次测试。

结果是这样的:

按 StartFetchDateTimeUtc 排序

在此输入图像描述

按 _ts 排序

在此输入图像描述