Разделены ли индексы Azure CosmosDB по разделам

#azure-cosmosdb

#azure-cosmosdb

Вопрос:

Я отправляю некоторые события IoT в Azure Cosmos DB. Я разделяю по идентификатору устройства и всегда запрашиваю по идентификатору устройства. Я хочу знать, разделены ли автоматически созданные индексы ключом раздела. В частности, если я делаю запрос, подобный

 SELECT TOP 5 ... FROM events WHERE deviceId = X ORDER BY timeStamp DESC
  

Будет ли он использовать автоматически созданный индекс по метке времени, и если да, то эффективен ли он. По сути, я спрашиваю, есть ли отдельные индексы в timeStamp для каждого ключа раздела (DeviceID в моем случае), потому что в противном случае индекс будет относительно бесполезным, поскольку диапазон будет содержать много нерелевантных данных с других устройств. Если бы это был SQL Server, я бы создал индекс на DeviceID, за которым следует временная метка, но я не уверен, как Cosmos DB работает по умолчанию.

Ответ №1:

Индексы находятся внутри раздела, так что да.

Для этого запроса, который у вас есть, вы также должны создать составной индекс с порядком сортировки по убыванию для лучшей производительности.

Комментарии:

1. Если я упорядочиваю только по метке времени, не может ли индекс использоваться в обратном порядке? Я думаю, что SQL Server сделает это (очевидно, что это не SQL Server)

2. Нет, вам понадобится составной индекс при использовании Order By для лучшей производительности. Фактически, это может вызвать исключение сейчас, если его нет.