在 Azure Cosmos DB 中对分区键建立索引

问题描述 投票:0回答:2

假设我的容器中有以下数据:

{
    "id": "1DBF704E-1623-4844-DC86-EFA729A5C048",
    "firstName": "Wylie",
    "lastName": "Ramsey",
    "country": "AZ",
    "city": "Tucson"
}

当我查询特定分区键时,我使用字段“id”作为项目 id,字段“country”作为分区键:

SELECT * FROM c WHERE c.country = "AZ"

(获取“AZ”中的所有人员)

我应该添加“国家/地区”作为索引,还是默认获得它,因为我声明“国家/地区”作为分区键? 使用 SDK 时有区别吗(意思是:添加

new PartitionKey("AZ")
选项,然后如上所述发送查询)?

azure-cosmosdb database-partitioning azure-cosmosdb-sqlapi
2个回答
19
投票

我创建了一个包含 50,000 条记录的集合,并禁用了所有属性的索引。

索引政策:

{
    "indexingMode": "consistent",
    "automatic": true,
    "includedPaths": [], // Included nothing
    "excludedPaths": [
        {
            "path": "/\"_etag\"/?"
        },
        {
            "path": "/*" // Exclude all paths
        }
    ]
}

按id查询成本2.85 RU。 按 PartitionKey 查询成本580 RU

添加了带有 PartitionKey(国家)的索引策略:

{
    "indexingMode": "consistent",
    "automatic": true,
    "includedPaths": [
        {
            "path": "/country/*"
        }
    ],
    "excludedPaths": [
        {
            "path": "/\"_etag\"/?"
        },
        {
            "path": "/*" // Exclude all paths
        }
    ]
}

在 PartitionKey 上添加索引使其减少到 2.83 RUs

所以答案是肯定的,如果您禁用了默认索引策略并且需要按分区键搜索,那么您应该为其添加索引。


-1
投票

在我看来,在 cosmosdb sql api 中使用分区键查询是一个很好的做法,这是与之相关的官方文档

顺便说一下,cosmosdb sql api 默认索引所有属性。如果您想覆盖默认设置并自定义索引策略,此文档可能会提供更多详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.