Spec-Zone.ru › MariaDB

ЗАЯВЛЕНИЕ SET

MariaDB начиная с 10.1.2

В MariaDB 10.1.2 были введены переменные на уровне запроса.

SET STATEMENT может использоваться для установки значения системной переменной на время выполнения данного запроса. Также можно установить несколько переменных.

Синтаксис

SET STATEMENT var1=value1 [, var2=value2, ...] 
  FOR <statement>

где varN — это системная переменная (список разрешенных переменных приведен ниже), а valueN — это константа-литерал.

Описание

SET STATEMENT var1=value1 FOR stmt

приблизительно эквивалентно

SET @save_value=@@var1;
SET SESSION var1=value1;
stmt;
SET SESSION var1=@save_value;

Сервер анализирует всё заявление до его исполнения, поэтому любые переменные, установленные таким способом, которые влияют на анализатор, могут не иметь ожидаемого эффекта. Примеры включают переменные кодировки символов, sql_mode=ansi_quotes и т. д.

Примеры

Можно ограничить время выполнения запроса max_statement_time:

SET STATEMENT max_statement_time=1000 FOR SELECT ... ;

Можно включить/выключить отдельные оптимизации:

SET STATEMENT optimizer_switch='materialization=off' FOR SELECT ....;

Можно включить MRR/BKA для запроса:

SET STATEMENT  join_cache_level=6, optimizer_switch='mrr=on'  FOR SELECT ...

Обратите внимание, что бессмысленно пытаться установить сессионную переменную внутри SET STATEMENT:

#USELESS STATEMENT
SET STATEMENT sort_buffer_size = 100000 for SET SESSION sort_buffer_size = 200000;

В приведенном выше примере после установки sort_buffer_size на 200000 она будет сброшена до своего первоначального состояния (состояния до начала SET STATEMENT ) после выполнения запроса.

Ограничения

Существует ряд переменных, которые нельзя установить на уровне отдельного запроса. К ним относятся:

  • autocommit
  • character_set_client
  • character_set_connection
  • character_set_filesystem
  • collation_connection
  • default_master_connection
  • debug_sync
  • interactive_timeout
  • gtid_domain_id
  • last_insert_id
  • log_slow_filter
  • log_slow_rate_limit
  • log_slow_verbosity
  • long_query_time
  • min_examined_row_limit
  • profiling
  • profiling_history_size
  • query_cache_type
  • rand_seed1
  • rand_seed2
  • skip_replication
  • slow_query_log
  • sql_log_off
  • tx_isolation
  • wait_timeout

Источник

  • Функция первоначально была реализована в рамках Google Summer of Code 2009 проектом Джозефа Лукаса.
  • Percona Server 5.6 включал её как заявление переменной на уровне запроса
  • MariaDB перенесла исправление и исправила много ошибок. Задача в MariaDB Jira — MDEV-5231.
Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержимое не просматривается предварительно компанией MariaDB. Мнения, информация и мнения, выраженные в этом содержании, необязательно отражают точку зрения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/set-statement/

Spec-Zone.ru

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