Неожиданные результаты при фильтрации запроса с равным, содержит, начинается с и заканчивается с - PullRequest
0 голосов
/ 10 июля 2019

SELECT value count(1) from c where c.FormName = "Newsletter" возвращает 2191

SELECT value count(1) from c where contains (c.FormName, "Newsletter") возвращает 697

SELECT value count(1) from c where startswith(c.FormName, "Newsletter") возвращает 2191

SELECT value count(1) from c where endswith(c.FormName, "Newsletter") возвращает 701

Я ожидал, что все эти запросы вернут одно и то же значение 2191, но contains и endswith вернут неожиданное значение.

Это нормально?

1 Ответ

0 голосов
/ 10 июля 2019

Это нормально, да. Все эти запросы будут использовать некоторые RU. RU, которые будут использоваться, различны для каждого запроса, потому что их «загрузка» различна.

Когда вы делаете SELECT value count(1), вы заставляете Cosmos возвращать все свои результаты в одном запросе. Однако Cosmos DB возвращает только постраничные результаты. Это разбиение на страницы также помогает распределить нагрузку по многим запросам и объединить их на клиентском сайте. SELECT value count(1) не разрешит такую ​​агрегацию, поэтому вы получите номер ответа до того, как в вашем запросе закончатся RU.

Если вы сделали SELECT c.id from c where blablabla и использовали подход while(query.HasMoreResults) & query.ExecuteNextAsync() и агрегировали счет на стороне клиента, вы должны получить те же цифры.

...