Почему 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,
    ...
}

Когда я запускаю следующий запрос, я получаю нулевое использование индекса. Заметки:

  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();
    

образ

С другой стороны, если я добавлю 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/

Другие вопросы по тегам