2017-06-13 178 views
0

好吧,因此CosmosDb Collection将其索引策略设置为一致,自动,默认散列和范围索引我们在自己的时间戳属性中添加了一个路径为了排序他们。Azure Cosmos Document DB中的自定义索引不起作用

我知道这些路径是正确的,因为我无法按它们排序,除非我让它们设置。但是:

当内置属性_TS宇宙排序 - 为排序依据查询的成本是一样20 RU/s的。那很棒。 现在,我们OWN时间戳列排序时(我们有两个,其中一个是一个字符串时间戳,另一个是Unixbased数一样内置_TS。 这个查询费400 RU /小号!???

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

我知道你无法更改索引pol冰冷的Ad Hoc早些时候,但这已经根据微软解决。

编辑:它是一个简单集合,没有分割构造,并且查询执行针对此仅收集,只选择一个文件(顶部1)。

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

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": [] }

+0

您是否可以包含更多信息,包括自定义查询返回的文档数与_ts的顺序以及此查询是否限于单个分区? –

+0

当然,它只有一个。用上述查询和索引编辑上面的帖子。 – imbageek

回答

0

这可能是在这里,你打的情况下指数碰撞(多值映射到相同的索引项)。

为了尽量减少冲突的机会,并且如果订单项已知最小/最大值,您可以在订单项上添加一个过滤器以缩小检索到的索引项的范围。

例如,

SELECT * 由C WHWE c.DateTime BETWEEN '2000-01-01T00:00:00.0000000Z' 与 '3000-01-01T00:00:00.0000000Z' ORDER BY c.DateTime

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

+0

但是,数字的精度设置为-1(最大)。看到上面编辑过的帖子 – imbageek