为什么Cosmos DB在索引属性中显示0.00%的索引利用率?

时间:2018-12-12 19:11:37

标签: azure azure-cosmosdb azure-cosmosdb-sqlapi

您能告诉我为什么索引利用率为0.00%吗?

我在索引策略中包括以下路径:

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

这是我的文档的一个示例:

{
    "id": "",
    "userId": "XYZ",
    ...
    "receivedDateTime": 635903262620000000,
    ...
}

当我运行以下查询时,索引利用率为零。 注意:

  1. 我包含的任何其他属性/路径都不会发生 索引政策
  2. UserId是分区键

    client.CreateDocumentQuery<Message>(UriFactory.CreateDocumentCollectionUri(_databaseId, _collectionId),
                    new FeedOptions
                    {
                        PopulateQueryMetrics = true,
                        MaxItemCount = maxItemCount
                    })
                .Where(item => item.UserId == Guid.Parse("XYZ"))
                .OrderBy(m => m.ReceivedDateTime)
                .AsDocumentQuery();
    

image

另一方面,如果我将item.ReceivedDateTime >= 0添加到where子句中,即使item.ReceivedDateTime >= 0对所有文档都是true,我也可以获得98.02%的索引利用率。

client.CreateDocumentQuery<Message>(UriFactory.CreateDocumentCollectionUri(_databaseId, _collectionId),
                    new FeedOptions
                    {
                        PopulateQueryMetrics = true,
                        MaxItemCount = maxItemCount
                    })
                .Where(item => item.UserId == Guid.Parse("XYZ") && item.ReceivedDateTime >= 0)
                .OrderBy(m => m.ReceivedDateTime)
                .AsDocumentQuery();

image

谢谢

1 个答案:

答案 0 :(得分:0)

和其他数据库一样,索引属性在存储时可能已经排序。 因此,使用OrderBy不会像实际对它进行Where那样索引密集。

这里还有更多内容,可以给您一个提示:https://azure.microsoft.com/en-gb/blog/order-query-results-with-azure-documentdb/