open内核分析(四):查询重写
查询重写
SQL语言是多种语言的,也是多种不同的,不同的不同类型的不同经验的不同,开发的SQL语句也是各式各样的,另外SQL语言可以通过数据库的工具自动生成。只是想要的结果,而不是有趣的数据,获取数据库的 SQL 表现形式的语言表达方式,直接包含了一些最佳信息,这些信息可以被使用来查询查询把SQL语句转换为用户输入的等价查询,查询遵循更高效的SQL语句。
等相同:原语句结果和后价格的语句,输出。
高效性:后的语句,比原语句在执行时间和资源使用上更高效。
实例计算可以优化既定式可以基于关系的代查询优化,例如词下推、子查询等,也可以根据查询规则进行优化,例如外部连接、连接查询等。查询是基于规则的查询表逻辑优化。
在代码形式中,查询查询的架构:

下连接外连接外2连接外连接外连接或外连接连接转右外连接过程:在外连接中,如果查询条件中逻辑上能够包含IS NOT,c1 > 0,可以将查询转换成INNER JOIN,从而减少关联处理产生中间结果集。
外连接去掉Outer2Inner
下面首先以一个例子来说明各种多表连接方式的区别:

内连接内连接:返回两个表都满足的组合,相当于取两个表的交集。
左连接左外连接:返回左表中的所有行,如果左表中行在右表中没有匹配行,则结果中右表中的列返回空值。
右连接右外连接:返回右表中的所有行,如果右表中行在左表中没有匹配行,则结果中左表中的列返回空值。
连接全连接:表和右表中的所有行。当某行返回左表中没有匹配行时,则另一个中列空值,取两个表并集。

在以上实验的基础上增加t2表的where条件。

left join和inner join的结果是一样的,这是因为查询条件中包含WHERE t2.c2 >100这个条件,t2表所有不匹配查询元组均被掉(包括空值过滤),因此可以进行转换left -outer join>inner join,能够产生有效的t1和t2关联产生结果集,达到性能提升的目的。
在数据库系统中,查看是否有 RTE_JOIN 类型的节点存在,设置是否有 RTE_JOIN 类型的节点,在数据库系统中,直接进入到reduce_outer_joins接口,满足外部连接时再执行连接的删除。reduce_outer_Joins函数内部做两个动作:
(1)reduce_outer_joins_pass1采集检查,就是jointree中带有外链接,以及表的信息,为动作是否参考2个参考资料_1准备好,重点结构reduce_outer_joins_state;
(2)reduce_outer_joins_pass2真正完成删除外链接。


上一棵树的内存结构(树结构中目标的方法,目标的目标表存储结果的分析结果,rtable 存储存储表的结果表)表达式树)

对比reduce_outer_joins运行前后查询树,jointree和rtable中的jointype都由join_left转换为join_inner,即外连接已转为内连接。