azure - Cosmos DB 日期索引效率不高

标签 azure azure-cosmosdb

我有一个带有日期字段的集合,该字段由 C# 应用程序使用 DateTime 对象填充。该字段序列化为以下格式“2018-06-10T17:32:48.3285735Z”。

我还没有触及集合中的索引策略,因此字符串使用范围索引类型。从我在文档中读到的内容来看,这是索引日期的最有效方法,但是,当我在 ORDER BY 子句中使用日期字段时,查询消耗的 RU 比使用时间戳查询至少多 10 倍(_ts) 数字字段。这意味着为这个单一系列支付 10 倍的费用。

为了说明这个问题:

SELECT TOP 100 * FROM c ORDER BY c.Date DESC
//query consumes a minimum of 500 RUs

SELECT TOP 100 * FROM c ORDER BY c._ts DESC
//query consumes 50 RUs

这是应该如何工作的还是我错过了什么?我怀疑如果这是预期的行为,那么索引文档中会强调这一点,并且将日期存储为数字将突出显示为最佳实践。

编辑: 这是集合的索引策略(我从未更改过)。

{
    "indexingMode": "consistent",
    "automatic": true,
    "includedPaths": [
        {
            "path": "/*",
            "indexes": [
                {
                    "kind": "Range",
                    "dataType": "Number",
                    "precision": -1
                },
                {
                    "kind": "Range",
                    "dataType": "String",
                    "precision": -1
                },
                {
                    "kind": "Spatial",
                    "dataType": "Point"
                }
            ]
        }
    ],
    "excludedPaths": []
}

最佳答案

这可能与索引冲突有关(多个值映射到同一索引项)。 您可能想缩小提交日期的范围,看看是否有帮助。基本上,尝试这个查询:

SELECT TOP 100 * FROM c WHERE (c.Date BETWEEN '2000-01-01' AND '2100-01-01') ORDER BY c.Date DESC

请注意,添加的过滤器不应对查询结果集收费。

关于azure - Cosmos DB 日期索引效率不高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50786623/

相关文章:

azure - 新创建的 azure 广告组在 azure devops(rest api)中不可用

Azure Datalake Gen2 作为 Azure 数据资源管理器的外部表

azure - 在 Azure 逻辑应用中获取 HTTP 请求 header

c# - Azure Function 引发 Azure Document Client 构造函数异常(在测试工具中工作)

azure - DocumentDB 和用于查询集合的客户端 javascript API

python - 没有名为 azure.cosmos.cosmos_client 的模块

php - 使用 php 通过 azure-website 连接到 azure-blob

azure - 具有事件网格触发器绑定(bind)的函数应用程序 - Azure DevOps

azure - 如何使用 C# REST API 生成不记名 token 并使用不记名 token 进行身份验证?

redis - 我可以用 Cosmos DB 替换 Redis 缓存吗?