您能告诉我为什么索引利用率为0.00%吗?
我在索引策略中包括以下路径:
{
"path": "/receivedDateTime/?",
"indexes": [
{
"kind": "Range",
"dataType": "Number",
"precision": -1
},
{
"kind": "Hash",
"dataType": "String",
"precision": 3
}
]
}
这是我的文档的一个示例:
{
"id": "",
"userId": "XYZ",
...
"receivedDateTime": 635903262620000000,
...
}
当我运行以下查询时,索引利用率为零。 注意:
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();
另一方面,如果我将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();
谢谢
答案 0 :(得分:0)
和其他数据库一样,索引属性在存储时可能已经排序。
因此,使用OrderBy
不会像实际对它进行Where
那样索引密集。
这里还有更多内容,可以给您一个提示:https://azure.microsoft.com/en-gb/blog/order-query-results-with-azure-documentdb/