- 博客(23)
- 收藏
- 关注
原创 Oceanbase查询优化:join order生成
在查询优化过程中,Oceanbase使用动态规划算法自下向上地对join order进行枚举,然后使用冲突规则对枚举的合法性进行判断,能够在保证正确性的基础上进行充分的探索,为得到最优的执行计划提供了基础。
2023-03-06 12:03:39
555
原创 Oceanbase查询优化:访问路径代价估算
在生成执行计划之前,Oceanbase会估算访问路径的代价以剪除代价较大的访问路径,为进一步优化提供基础。
2023-03-06 12:01:26
448
原创 Oceanbase查询改写番外篇:谓词推导
Oceanbase在谓词移动规则中实现了谓词推导,该特性能够利用已有谓词推导出新的谓词,从而更加充分地利用索引并减少不必要的数据处理,提升查询性能。
2023-03-06 11:58:00
228
原创 Oceanbase查询改写:窗口函数提升
当查询语句中存在窗口函数和group by操作时,会对查询性能有较大的影响。为此,Oceanbase中定义了窗口函数提升规则,能够将满足条件的窗口函数提升到分组聚合之后执行,提升查询性能。
2023-03-06 11:55:56
330
原创 Oceanbase查询改写:or展开
当查询语句的or条件中存在多个不同列的条件时,由于无法选择有效的索引,执行时可能会退化成全表扫描。为此,Oceanbase中定义了or展开规则,能够将满足条件的查询语句依据or条件展开为集合语句,以充分利用索引,提升查询性能。
2023-03-06 11:55:28
269
原创 Oceanbase查询改写:winmagic优化
当查询语句中存在相关子查询时,可以考虑将其进行改写成两表连接的形式,从而可以避免使用嵌套的方式进行执行。当关联条件涉及的是同一张表时,那么这种改写方式仍然避免不了对该表的多次访问。为此,Oceanbase中定义了winmagic优化规则,能够将满足条件的查询语句转化为窗口函数语句进行执行,提升查询性能。
2023-03-06 11:53:13
264
原创 Oceanbase查询改写:聚合子查询提升
默认情况下,对于包含子查询的语句需要按照嵌套的方式进行执行,效率十分低下。为此,Oceanbase中定义了聚合子查询提升规则,能够对满足条件的聚合子查询提升为连接,提升查询性能。
2023-03-06 11:48:55
489
原创 Oceanbase查询改写:min/max聚合改写
对于单列的min/max聚合,如果参与聚合的列上存在索引,那么不需要实际遍历全表即可得到聚合结果。为此,Oceanbase中定义了min/max聚合改写规则,能够对此类查询语句进行改写,提升查询性能。
2023-03-02 15:26:33
138
原创 Oceanbase查询改写:外连接limit下推
当查询语句中包含连接操作时,执行过程中可能产生较大的中间结果集。为此,Oceanbase中定义了外连接limit下推规则,能够将满足条件的外连接查询中的limit表达式下推至外表视图,提升查询性能。
2023-03-02 15:23:34
806
原创 Oceanbase查询改写:groupby移动
当查询语句中同时存在连接操作和分组聚合操作时,可能会产生大量的io。为此,Oceanbase中定义了groupby移动规则,能够对满足条件的分组聚合操作进行提升或下推,提升查询性能。
2023-03-02 15:18:57
411
原创 Oceanbase查询改写:查询下推
默认情况下,当查询语句中存在视图时,需要等待视图中的查询执行完毕后再执行父查询。为此,Oceanbase中定义了查询下推规则,能够将满足条件的父查询下推合并到视图查询中,从而消除视图,提升查询性能。
2023-03-02 15:10:57
388
原创 Oceanbase查询改写:投影裁剪
当查询语句中包含视图查询时,执行过程中可能产生较大的中间结果集。为此,Oceanbase中定义了投影裁剪规则,能够父查询中没有用到的列从视图查询的select列表中移除,提升查询性能。
2023-03-02 15:07:05
118
原创 Oceanbase查询改写:谓词移动
当查询语句中存在谓词时,能够减少执行阶段需要处理的数据量。为此,Oceanbase中定义了谓词移动规则,能够利用查询语句中各部分已有的谓词推导出新的谓词,并将其尽可能下推至数据读取阶段,从而减少各阶段需要处理的数据量,提升查询性能。
2023-03-02 14:49:31
230
原创 Oceanbase查询改写:连接消除
通常情况下,如果查询语句中存在较多的连接操作,会对查询性能有较大的影响。为此,Oceanbase中定义了连接消除规则,能够识别和消除不必要的连接,提升查询性能。
2023-03-01 17:06:50
486
1
原创 Oceanbase查询改写:全外连接改写
通常情况下,执行引擎无法支持不含equal连接条件的全外连接查询。为此,Oceanbase中定义了全外连接改写规则,能够将上述查询转换成通过union all操作联合起来的两个子查询,为这类场景提供了支持。
2023-03-01 17:03:58
201
原创 Oceanbase查询改写:any/all子查询优化
默认情况下,对于包含any/all子查询的语句需要按照嵌套的方式进行执行,效率十分低下。为此,Oceanbase中定义了相应的any/all子查询优化规则,能够对满足条件的any/all子查询进行优化,提升查询性能。
2023-03-01 17:03:21
129
原创 Oceanbase查询改写:子查询合并
当SQL中存在多个子查询条件时,查询性能往往会受到较大影响。为此,Oceanbase中定义了子查询合并规则,能够将满足条件的多个子查询进行合并,从而减少不必要的子查询,提升查询性能。
2023-03-01 17:02:58
476
原创 Oceanbase查询改写:集合语句优化
集合语句(union,intersect,except)通常涉及多张表的查询,执行开销往往较大。为此,Oceanbase中定义了相应的集合语句优化规则,能够对满足条件的集合语句进行优化,提升查询性能。
2023-03-01 17:00:42
508
原创 Oceanbase查询改写:视图合并
默认情况下,当查询语句中存在视图时,需要等待视图中的查询执行完毕后再执行父查询。这种做法使得优化器无法将视图查询和父查询作为一个整体进行优化,限制了优化的空间。为此,Oceanbase中定义了相应的视图合并规则,能够将视图查询中的查询逻辑合并到父查询中,为优化器进一步优化提供了基础。
2023-03-01 16:50:20
484
原创 Oceanbase查询改写:where子查询提升
默认情况下,对于包含子查询的语句需要按照嵌套的方式进行执行,效率十分低下。为此,Oceanbase中定义了相应的where子查询提升规则,能够对满足条件的子查询提升为join,提升查询性能。
2023-03-01 16:45:15
536
原创 Oceanbase查询改写:半连接转内连接
当查询语句中存在半连接(semi join)时,由于半连接不满足交换律,因此只能按照语句定义的顺序进行连接,使得优化器无法根据参与连接的表的实际大小制定最优的方案。为此,Oceanbase中定义了半连接转内连接规则,能够将满足条件的半连接转为内连接,为优化器进一步优化提供了基础。
2023-03-01 16:42:07
224
原创 Oceanbase查询改写:外连接转内连接
与内连接不同,外连接不满足交换律结合律,因此在查询优化阶段不能根据实际数据表的大小选择最优的连接顺序。为此,Oceanbase中定义了外连接转内连接规则,能够将满足条件的外连接转为内连接,为优化器进一步优化提供了基础。
2023-03-01 16:38:59
278
原创 Oceanbase查询处理:SQL执行
当ObServer接受到查询语句后,按照如下流程对其进行执行:对SQL进行语法和词法解析,生成查询语法树。对查询语法树进行语义分析,生成对应的查询对象。依据关系代数对查询对象进行等价改写。为查询对象生成执行代价最优的逻辑计划。依据逻辑计划生成可执行的物理计划。执行生成的物理计划。
2023-03-01 16:34:20
1347
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人