优化规则与表达式下推的黑名单

本文主要介绍优化规则的黑名单与表达式下推的黑名单。

优化规则黑名单

优化规则黑名单是针对优化规则的调优手段之一,主要用于手动禁用一些优化规则。

重要的优化规则

优化规则 规则名称 简介
列裁剪 column_prune 对于上层算子不需要的列,不在下层算子输出该列,减少计算
子查询去关联 decorrelate 尝试对相关子查询进行改写,将其转换为普通 join 或 aggregation 计算
聚合消除 aggregation_eliminate 尝试消除执行计划中的某些不必要的聚合算子
投影消除 projection_eliminate 消除执行计划中不必要的投影算子
最大最小消除 max_min_eliminate 改写聚合中的 max/min 计算,转化为 order by + limit 1
谓词下推 predicate_push_down 尝试将执行计划中过滤条件下推到离数据源更近的算子上
外连接消除 outer_join_eliminate 尝试消除执行计划中不必要的 left join 或者 right join
分区裁剪 partition_processor 将分区表查询改成为用 union all,并裁剪掉不满足过滤条件的分区
聚合下推 aggregation_push_down 尝试将执行计划中的聚合算子下推到更底层的计算节点
TopN 下推 topn_push_down 尝试将执行计划中的 TopN 算子下推到离数据源更近的算子上
Join 重排序 join_reorder 对多表 join 确定连接顺序

禁用优化规则

当某些优化规则在一些特殊查询中的优化结果不理想时,可以使用优化规则黑名单禁用一些优化规则。

使用方法

注意

以下操作都需要数据库的 super privilege 权限。每个优化规则都有各自的名字,比如列裁剪的名字是 "column_prune"。所有优化规则的名字都可以在重要的优化规则表格中第二列查到。

  • 如果你想禁用某些规则,可以在 mysql.opt_rule_blacklist 表中写入规则的名字,例如:

     

    INSERT INTO mysql.opt_rule_blacklist VALUES("join_reorder"), ("topn_push_down");

    执行以下 SQL 语句可让禁用规则立即生效,包括相应 TiDB Server 的所有旧链接:

     

    ADMIN reload opt_rule_blacklist;

    注意

    admin reload opt_rule_blacklist 只对执行该 SQL 语句的 TiDB server 生效。若需要集群中所有 TiDB server 生效,需要在每台 TiDB server 上执行该 SQL 语句。

  • 需要解除一条规则的禁用时,需要删除表中禁用该条规则的相应数据,再执行 admin reload

     

    DELETE FROM mysql.opt_rule_blacklist WHERE name IN ("join_reorder", "topn_push_down"); admin reload opt_rule_blacklist;

表达式下推黑名单

表达式下推黑名单是针对表达式下推的调优手段之一,主要用于对于某些存储类型手动禁用一些表达式。

已支持下推的表达式

表达式分类 具体操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天读点书学堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值