查询优化器是SQL引擎的构成组件之一。它的用途是及时提供高效的查询计划。查询优化器可以分解为逻辑优化器和物理优化器。

Oracle SQL引擎的体系结构如图所示:

sql解析json mysql Sql解析引擎_Oracle 12c

以上是SQL引擎的关键组件。

  • 解析器:它的用途是向查询优化器传递SQL语句解析后的形式。
  • 逻辑优化器:在逻辑优化阶段,查询优化器通过应用不同的查询转换技术产生新的语义相等的SQL语句。逻辑优化器的目的是选择出查询转换的最佳组合。在这种情况下,搜索空间增加了,执行计划可以被探索而不会被认为没有经过这样的查询转换。
  • 物理优化器:在物理优化阶段,执行了几项操作。一开始,针对逻辑优化生成的每个SQL语句生成了几个执行计划。然后每个执行计划都发送给成本估算器让其计算出一个成本。最后,拥有最低成本的那个执行计划就被选中了。简单地说,物理优化器探索搜索空间来找到最有效率的执行计划。
  • 成本估算器:计算由物理优化器提交的执行计划的成本。
  • 行源生成器:查询优化器生成的执行计划不能直接由执行引擎执行。它必须转化成行源操作树以存储在库缓存中。
  • 执行引擎:这个组件执行由行源生成器产生的行源操作。如果基数反馈的监控是激活的,执行引擎(执行完毕后)会校验实际值和估算值的差异是否明显。如果找到了明显差异,关于正确值的信息就会存储到共享SQL区中,并且在下一次执行中,再优化是强制进行的。

 

看看下面这个图:

sql解析json mysql Sql解析引擎_SQL_02

 

注意黄颜色框内的部分。