简介:本文介绍了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:子查询优化:不存在转换,而不是反对加入”
表表达“”
资料来源:阿里巴巴云