hint用法mysql_MySQL8.0优化Hint-查询语句中设置会话变量

从MySQL8.0.3开始,MySQL支持一种新的优化Hint,名字叫SET_VAR,这个特性支持用户在查询语句里修改MySQL数据库的一些会话变量,当然修改只是对当前查询会话生效,不会影响到其他会话。

先来看看在此之前,我们要对一个查询进行会话变量修改,需要怎么操作:

1.查询之前的系统变量

mysql> select @@optimizer_switch;

2.备份系统变量

mysql> set @old_optimizer_switch = @@optimizer_switch;

3.设置新的变量

mysql> set optimizer_switch='index_merge=off';

4.运行查询语句

mysql> select c_id from customer limit 1;;

5.恢复之前的系统变量

mysql> set optimizer_switch = @old_optimizer_switch;

是不是有点繁琐,现在我们使用SET_VAR这个新特性,很方便的就可以做这个操作了。

mysql> select /*+ set_var(optimizer_switch='index_merge=off') set_var(join_buffer_size=4M) */ c_id from customer limit 1;

+------+

| c_id |

+------+

| 1814 |

+------+

1 row in set (0.00 sec)

这个新特性是不是很方便呢,想想之前,在体验MySQL的ICP,MRR等新查询特性带来快感的时候,由于执行计划器选择错误,导致查询语句性能低下的时候,又不能随意更改线上数据库的变量,有了SET_VAR这个新特性,对于这种情况,是不是可以考虑在查询语句中就优化掉呢。

但是这个只是对部分变量可以用的,基本都是和SQL查询相关的变量才能这样操作。目前主要支持的变量如下,大家使用的时候参考即可。

SET_VAR支持的变量列表:

auto_increment_increment

auto_increment_offset

big_tables

bulk_insert_buffer_size

default_tmp_storage_engine

div_precision_increment

end_markers_in_json

eq_range_index_dive_limit

foreign_key_checks

group_concat_max_len

insert_id

internal_tmp_mem_storage_engine

join_buffer_size

lock_wait_timeout

max_error_count

max_execution_time

max_heap_table_size

max_join_size

max_length_for_sort_data

max_points_in_geometry

max_seeks_for_key

max_sort_length

optimizer_prune_level

optimizer_search_depth variables

optimizer_switch

range_alloc_block_size

range_optimizer_max_mem_size

read_buffer_size

read_rnd_buffer_size

sort_buffer_size

sql_auto_is_null

sql_big_selects

sql_buffer_result

sql_mode

sql_safe_updates

sql_select_limit

timestamp

tmp_table_size

updatable_views_with_limit

unique_checks

windowing_use_high_precision

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值