自MariaDB 10.1.2起,MariaDB提供了一种"Per-query variables的方式来为Query设置语句级变量,通过 SET STATEMENT 语句可以为接下来要执行的语句设置一些系统变量值。 **语法** SET STATEMENT var1=value1 [, var2=value2, ...] FOR varN是一个系统变量,valueN是一个常量值。但是有部分变量是不支持的,在这个章节的末尾列出了所有不支持的变量。 一条 "SET STATEMENT var1=value1 FOR stmt" 语句等价与如下一系列操作: SET @save_value=@@var1; SET SESSION var1=value1; stmt; SET SESSION var1=@save_value; MySQL服务器在执行整条语句前会先做解析,所以所有影响解析器的变量都无法达到预期的效果,因为解析完之后才能获得这些变量的值。例如字符集变量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 ... **下面这些变量无法使用Per-query variables特性来设置** 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