当前位置: 首页 > 网络应用技术

解解| | m m |插图MySQL 8.0优化器查询转换文章

时间:2023-03-08 17:13:25 网络应用技术

  简介:本文介绍了Zizi查询,分析表和加入的复杂转换过程

  在文章“ ding ding xie niu插图MySQL 8.0优化器查询分析文章”中,我们重点介绍MySQL 8.0.25的最新版本,以分析,设置和转换SQL基本元素表,列,列,函数,函数,聚合,聚集,分组,分类和其他元素在该过程中,我们将继续介绍更复杂的子查询,分区表和加入的复杂转换过程。大纲如下:

  转型

  1个respol

  分析条件具有子问题陈述,并进行一些早期无限的子问题转换,包括:

  转换判断条件

  设置subquery_strategy :: cantixed_for_semijoin并添加sj_candidates

  item_in_subselect/item_allany_subselect :: select_transformer-> select_in_like_transformer

  2个转换后的量子查询转换为派生表(troment_scalar_subqueries_to_join_with_serive)

  此功能是在8.0.16中对辅助引擎(HEAPWAVE)的官方支持的官方推动,以增强子女查询的转换能力。:

  下图解决了函数的转换过程和结果:

  3 flatten_subqueries

  此功能主要将半加入查询转换为嵌套联接。这个过程只有一次,不可逆转。

  4当前查询块转换的应用(apply_local_transforms)

  在flatern flattern的子征服之后,自下而上的呼叫主要分为几个步骤:

  delete(delete_unused_merged_columns)

  如果查询块已删除了一些派生的表/视图,则遍历选择列表的列,请删除不必要的列

  简化加入(Simplify_joins)

  此功能将简化query_block中top_join_list的嵌套联接到平面的联接列表中。嵌套连接包含table1 join table2,还包括table1,(table2,table3)。如果显示的简化过程:

  分区表的静态分支(Prune_partitions)

  由于根据哈希/范围/列表和辅助分区的分支有所不同,因此在此处简要介绍修剪过程。在准备和优化阶段期间调用现有的prune_partitititinos,并评估和执行某些常数查询。

  5将条件推到派生表(push_conditions_to_derived_tables)

  此功能将条件推向派生表格,并查看WL#8084条件下降到实现的派生表。

  该过程如下:

  此过程的详细图如下:

  这两篇文章着重于以下优化的优化部分。它不涉及更多基于成本的优化。可以看出,可以看到直接使用规则优化的执行加速度,因此可以直接转换它,尤其是在查询结构的结构上,例如Merge_Derived。优化器将保留某些临时结构的结构。优化规则使用和使用规则的优化,该规则将为后续估计提供更多选项,例如/存在/实现的转换。当然,如果您更改查询结构,则是不可能确定是否不支持定期转换的执行加速度。尽管详细介绍了该文章,但不能涵盖整个情况。这也是要吸引砖块。还必须通过调试来了解有关某种类型SQL的特定过程的更多信息。

  “ MySQL 8.0服务器层的最新体系结构的详细说明”

  “ WL#13520:转换相关的标量亚征””

  “ WL#8084-条件下降到实现的派生表”

  “ WL#2980:子查询优化:Semijoin”

  “ WL#4389:子查询优化:在优化中制造也存在”

  “ WL#4245:子查询优化:不存在转换,而不是反对加入”

  表表达“”

  资料来源:阿里巴巴云