azure-cosmosdb - DocumentDB 范围和哈希索引

标签 azure-cosmosdb

我有以下搜索要求:

SELECT * FROM root WHERE root.parentPath = 'value'

SELECT * FROM root WHERE STARTSWITH(root.parentPath,'value')

对于 hash 索引类型,第一个查询运行速度很快,而第二个查询需要扫描,所以速度很慢。

对于“范围”索引类型,第一个查询较慢,第二个查询较快。

为了支持这两种查询,我需要将数据存储两次吗?当我再次尝试添加索引时,出现以下错误 Duplicate indexes specified for the path

-- 编辑

我已将以下 XML 添加到索引的设置区域,它适用于 Range 或 Hash,但不能同时适用于两者。

{
    "path": "/parentPath/?",
    "indexes": [
        {
            "kind": "Range",
            "dataType": "String",
            "precision": 3
        },
        {
            "kind": "Hash",
            "dataType": "String",
            "precision": 3
        },
        {
            "kind": "Range",
            "dataType": "Number",
            "precision": -1
        }
    ]
}

最佳答案

一般来说,Hash索引不应该比Range索引有查询性能优势。在某些情况下,由于索引冲突,哈希索引似乎可以提高查询性能。这里的建议是对所有索引路径坚持使用范围索引和精度 -1。

要检查查询是否存在索引冲突(索引利用率低),请按照本文检索查询执行指标:https://learn.microsoft.com/en-us/azure/cosmos-db/sql-api-sql-query-metrics#query-execution-metrics

关于azure-cosmosdb - DocumentDB 范围和哈希索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48118337/

相关文章:

c# - 如何使用 Function App 中存储的应用程序值中的值设置 CosmosDBTrigger 参数?

javascript - Azure Cosmos DB 存储过程响应大小太大

visual-studio - CosmosDB项目布局

c# - DocumentDB 查询嵌套对象

azure - 删除 Cosmos DB 容器是否会消耗 RU?

Azure CosmosDB 未在Where 子句中返回带有UDF 的结果

azure - SQL 查询包含对象数组中的属性值

rest - Azure DocumentDB Rest API PowerShell 删除集合 401 未经授权

azure - Cosmos DB 模拟器 :

azure - 使用 Azure CLI 连接到 Linux 上的 Azure CosmosDB 模拟器