Почему Cosmos DB показывает индекс использования 0,00 % по индексируемому свойству?
Можете ли вы сказать, почему коэффициент использования индекса составляет 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
к предложению, где я получаю 98,02 % использования индекса, даже когда item.ReceivedDateTime >= 0
верно для всех документов.
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();
Спасибо
1 ответ
Как и мои другие базы данных, индексированные свойства, вероятно, уже упорядочены при хранении. Следовательно, используя OrderBy
не будет настолько интенсивным индексом, как на самом деле делает Where
в теме.
Вот еще немного, чтобы дать вам подсказку: https://azure.microsoft.com/en-gb/blog/order-query-results-with-azure-documentdb/