首页 文章

Azure Cosmos Document DB中的自定义索引不起作用

提问于
浏览
0

好吧,所以CosmosDb Collection将它的索引策略设置为一致,自动,具有默认的哈希和范围索引 AND 我们添加了一个路径到我们自己的时间戳属性,以便按它们排序 .

我知道路径是正确的,因为我无法通过它们订购,除非我设置它们 . 但:

按Cosmos内置属性 _ts 排序时 - OrderBy查询的成本类似于 20 RU/s . 那很棒 . 现在,按 OWN 时间戳列排序时(我们有两个,其中一个是字符串时间戳,另一个是基于Unix的数字,就像内置的 _ts 列一样 . 此查询成本为 400 RU/s !???

使用新的索引规则使我们能够查询和订购它,但RU是疯了 . 为什么这样,我们如何解决它?

我知道您之前无法更改索引策略Ad Hoc,但微软已经解决了这个问题 .

EDIT: 这是一个简单的集合,没有配置分区,查询仅针对此集合运行,只选择一个文档(前1个) .

SELECT top 1 * FROM c WHERE c.AllCompleted = true ORDER BY c.EndFetchDateTimeUtcUnix DESC

SELECT top 1 * FROM c WHERE c.AllCompleted = true ORDER BY c._ts DESC

该指数看起来像这样: { "indexingMode": "consistent", "automatic": true, "includedPaths": [ { "path": "/", "indexes": [ { "kind": "Hash", "dataType": "Number", "precision": 3 }, { "kind": "Hash", "dataType": "String", "precision": 3 } ] }, { "path": "/EndFetchDateTimeUtcUnix/?", "indexes": [ { "kind": "Range", "dataType": "Number", "precision": -1 }, { "kind": "Hash", "dataType": "String", "precision": 3 } ] } ], "excludedPaths": [] }

2 回答

  • 0

    这可能是您遇到索引冲突(多个值映射到同一索引术语)的情况 .

    为了最大限度地减少冲突的可能性,并且如果逐个项目具有已知的最小值/最大值,则可以在逐个订单项上添加过滤器以缩小检索到的索引术语的范围 .

    例如,

    SELECT * FROM c WHWE c.DateTime BETWEEN '2000-01-01T00:00:00.0000000Z' AND '3000-01-01T00:00:00.0000000Z' ORDER BY c.DateTime

    同样,您可以将相同的技术应用于数字时间戳 .

  • 0

    我建议您调查DocumentDB花费的精力 . 转到Query execution metrics Headers 以获取线索 .

相关问题