Spec-Zone.ru › MySQL Connectors 1.0

8.4 Работа с подготовленными запросами

X DevAPI повышает производительность для каждого оператора CRUD, который выполняется повторно, используя подготовленный на стороне сервера запрос для его повторных выполнений. Это происходит внутри — приложениям не нужно ничего дополнительно делать, чтобы использовать эту функцию, если только используется один и тот же объект операции.

Когда оператор выполняется второй раз с изменениями только в значениях данных или в значениях, уточняющих результаты выполнения (например, разные offset() или limit() значения), сервер подготавливает оператор для последующих выполнений, так что не нужно повторно парсить оператор при его повторном запуске. Новые значения для повторных выполнений подготовленного оператора предоставляются с помощью привязки параметров. Когда оператор модифицируется путем добавления метода, уточняющего результат (например, sort(), limit() или offset()), запрос переподготавливается. Следующий псевдокод и комментарии к нему демонстрируют эту функцию:

var f = coll.find("field = :field");
f.bind("field", 1).execute(); // Normal execution
f.bind("field", 2).execute(); // Same statement executed with a different parameter value triggers statement preparation
f.bind("field", 3).execute(); // Prepared statement executed with a new value
f.bind("field", 3).limit(10).execute(); // Statement reprepared as it is modified with limit()
f.bind("field", 4).limit(20).execute(); // Reprepared statement executed with new parameters 

Обратите внимание, что для использования этой функции необходимо повторно использовать один и тот же объект операции при повторении оператора. Посмотрите на этот пример

for (i=0; i<100; ++i) {
    coll.find("field = :field").bind("field", i).execute();
}

Этот цикл не может использовать функцию подготовленного запроса, потому что объект операции coll.find() создается заново на каждой итерации цикла for. Теперь посмотрите на этот пример:

var f = coll.find("field = :field");

for (i=0; i<100; ++i) {
    f.bind("field", i).execute();
}

Повторяемый оператор подготавливается один раз, а затем используется повторно, так как один и тот же оператор coll.find() повторно выполняется для каждой итерации цикла for.

Подготовленные запросы являются частью Session. Когда Client сбрасывает Session (например, используя Mysqlx.Session.Reset), подготовленные запросы удаляются.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/x-devapi-userguide-en/working-with-prepared-statements.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API