DocumentDB Range和Hash索引

时间:2018-01-05 17:19:10

标签: azure-cosmosdb

我对以下搜索有一个要求:

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

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

对于索引类型hash,第一个查询运行速度很快,第二个查询需要扫描,因此速度非常慢。

对于索引类型' range`,第一个查询很慢,第二个查询很快。

为了支持这两个查询,我需要将数据存储两次吗?当我尝试再次添加索引时,我收到以下错误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
        }
    ]
}

1 个答案:

答案 0 :(得分:4)

通常,哈希索引不应该具有超过Range索引的查询性能优势。在某些情况下,由于索引冲突,哈希索引似乎可以提高查询性能。这里的建议是为所有索引路径添加范围索引和精度-1。

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