---
metadata:
  - name: generator
    content: Diplodoc Platform v5.50.6
alternate:
  - https://ydb.tech/docs/en/reference/ydb-sdk/parameterized_queries.md?version=main
  - https://ydb.tech/docs/ru/reference/ydb-sdk/parameterized_queries.md?version=main
sourcePath: ru/core/reference/ydb-sdk/parameterized_queries.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ydb.tech/docs/ru/llms.txt

## Параметризованные запросы

YDB поддерживает и рекомендует к использованию так называемые [параметризованные запросы](https://en.wikipedia.org/wiki/Prepared_statement). В таких запросах данные передаются отдельно от самого тела запроса, а в SQL-запросе используются специальные параметры для обозначения местоположения данных. Планы параметризованных запросов кешируются на стороне сервера (по умолчанию — до 1000 записей), что позволяет переиспользовать планы для однотипных запросов, которые отличаются лишь значением параметров.

Во многих YDB SDK кеширование параметризованных запросов включено по умолчанию. При необходимости его можно отключить, установив для параметра `KeepInCache` значение `false`.

Запрос с данными в теле запроса:

```yql
SELECT sa.title AS season_title, sr.title AS series_title
FROM seasons AS sa INNER JOIN series AS sr ON sa.series_id = sr.series_id
WHERE sa.series_id = 15 AND sa.season_id = 3
```

Соответствующий ему параметризованный запрос:

```yql
DECLARE $seriesId AS Uint64;
DECLARE $seasonId AS Uint64;

SELECT sa.title AS season_title, sr.title AS series_title
FROM seasons AS sa INNER JOIN series AS sr ON sa.series_id = sr.series_id
WHERE sa.series_id = $seriesId AND sa.season_id = $seasonId
```

Параметризованные запросы записываются в форме шаблона, в котором определенного вида имена заменяются конкретными параметрами при каждом выполнении запроса. Лексемы начинающиеся со знака `$` такие, как `$seriesId` и `$seasonId` в запросе выше, используются для обозначения параметров.

Параметризованные запросы обеспечивают следующие преимущества:

* При повторяющихся запросах сервер базы данных имеет возможность кешировать план запроса для параметризованных запросов. Это радикально снижает потребление CPU и повышает пропускную способность системы;
* Использование параметризованных запросов спасает от уязвимостей вида [SQL Injection](https://en.wikipedia.org/wiki/SQL_injection).
* Сокращение кода — меняются только аргументы запроса, но не сам запрос. Не требуется ручная конкатенация строки запроса.

## Смотрите также

- [Параметризованные запросы](https://ydb.tech/docs/ru/dev/example-app/index.md?version=main#param-queries)