Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Cosmos DB теперь предоставляет помощник по запросам, предназначенный для ускорения и повышения эффективности запросов с помощью языка запросов Cosmos DB. Независимо от того, оптимизируете ли вы производительность, затраты или масштабируемость, помощник по запросам предоставляет практические рекомендации, которые помогут вам получить большую часть данных в Azure и Microsoft Fabric.
Почему важно оптимизировать запросы
Язык запросов Для Cosmos DB (в Azure и Fabric) является гибким, что позволяет разработчикам запрашивать данные JSON с знакомым синтаксисом SQL. По мере увеличения сложности приложений небольшие различия в структуре запросов могут оказать значительное влияние на производительность и единицы запросов (ЕЗ), особенно в большом масштабе.
Например, два запроса, возвращающие один и тот же результат, могут значительно отличаться в эффективности в зависимости от того, как записываются предикаты и как применяются индексы.
Помощник по запросам анализирует запросы и предлагает целевые рекомендации, которые помогут вам:
- Сокращение затрат на единицу запросов путем выявления неэффективных выражений или ненужных фильтров.
- Повышение производительности запросов с помощью более оптимальных структур запросов.
- Понять , почему" за каждым предложением, с объяснениями, написанными на четком, понятном для разработчика языке.
Принцип работы
При выполнении запроса помощник по запросам выполняет план запроса, вычисляя шаблоны, которые могут привести к высокому потреблению единиц запросов, чрезмерному сканированию или потенциально ненужной обработке. Затем он возвращает набор рекомендаций, указывающих, какая часть запроса может ограничивать производительность, и предлагает потенциальные изменения, которые могут помочь.
Использование помощника по запросу
Вы можете включить возможности помощника PopulateQueryAdvice по запросам, задав для QueryRequestOptions свойства значение true. Если параметр не указан, PopulateQueryAdvice по умолчанию используется falseзначение . Чтобы получить доступ к советам, используйте строковое свойство FeedResponse.QueryAdvice.
Это важно
Помощник по запросам работает только с пакетом SDK для .NET для Cosmos DB. Советы по запросу также возвращаются только во время первого круглого пути. Совет недоступен при последующих вызовах продолжения.
Рассмотрим этот пример запроса:
SELECT VALUE
r.id
FROM
root r
WHERE
CONTAINS(r.name, 'Abc')
Ниже приведен пример запроса пакета SDK, выполняющего этот запрос и использующего помощника по запросам:
using Microsoft.Azure.Cosmos;
CosmosClient client = new("<connection-string>");
Container container = client.GetContainer("<database-name>", "<container-name>");
string query = """
SELECT VALUE
r.id
FROM
root r
WHERE
CONTAINS(r.name, 'Abc')
""";
QueryRequestOptions requestOptions = new()
{
PopulateQueryAdvice = true
};
using FeedIterator<dynamic> itemQuery = container.GetItemQueryIterator<dynamic>(
query,
requestOptions: requestOptions);
string? queryAdvice = null;
while (itemQuery.HasMoreResults)
{
if (queryAdvice is not null)
{
break;
}
FeedResponse<dynamic> page = await itemQuery.ReadNextAsync();
queryAdvice = page.QueryAdvice;
}
Console.WriteLine(queryAdvice);
Этот запрос возвращает одну инструкцию совета для QA1002:
QA1002: If you are matching on a string prefix, consider using STARTSWITH. [...]
Советы по запросу содержат три важных фрагмента информации:
-
Идентификатор совета запроса:
QA1002 -
Описание рекомендаций: В этом примере
If you are matching on a string prefix, consider using STARTSWITH. - Ссылка на документацию: URL-адрес для подробных рекомендаций
Замечание
Ссылка на документацию была опущена в этом примере.
Примеры
Рассмотрим следующие примеры сценариев, где можно использовать помощник по запросам.
Оптимизация использования системной функции
Рассмотрим этот пример, в котором GetCurrentTimestamp используется функция:
SELECT
GetCurrentTicks()
FROM
container c
WHERE
GetCurrentTimestamp() > 10
В этом примере есть две части рекомендаций, возвращаемых помощником по запросу: QA1008 и QA1009. Каждая часть советов разделена на новую строку в строковых выходных данных.
QA1009: Consider using GetCurrentTimestampStatic instead of GetCurrentTimestamp in the WHERE clause. [...]
QA1008: Consider using GetCurrentTicksStatic instead of GetCurrentTicks in the WHERE clause. [...]
Используя этот совет, можно переписать запрос на следующую альтернативу:
SELECT
GetCurrentTicksStatic()
FROM
container c
WHERE
GetCurrentTimestampStatic() > 10