Почему Cosmos DB показывает индекс использования 0,00% по индексируемому свойству? - PullRequest
0 голосов
/ 12 декабря 2018

Можете ли вы сказать, почему использование индекса составляет 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, я получу 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();

image

Спасибо

1 Ответ

0 голосов
/ 13 декабря 2018

Как и в других моих базах данных, индексированные свойства, вероятно, уже упорядочены при хранении.Следовательно, использование OrderBy не будет таким интенсивным индексом, как на самом деле Where для него.

Вот еще немного, чтобы дать вам подсказку: https://azure.microsoft.com/en-gb/blog/order-query-results-with-azure-documentdb/

...