Oracle SQL查询过程
问题
一个SQL语句查询到数据显示的过程可以讲一下吗?
SQL语句的解析过程
服务器进程接收到一个sql语句时,首先要将其转换成执行这个sql语句的最有效的步骤,这个步骤被称为执行计划。
Oracle内部解析SQL的过程:
- 语法分析:分析语句语法是否符号规范,衡量语句汇总各个表达式(子句)的含义
- 语义分析:检查语句中涉及到的所有的数据库对象是否存在(表、列、视图、同义词……)并且它会检查你的相应权限
- 视图转换:将涉及视图的查询语句转换为相应的对基表的查询语句
- 表达式转换:将复制的SQL语句拆分或者转换成比较简单的表达式
- 选择合适的优化器:CBO(基于开销)RBO(基于规则)不用的优化器会产生不同的开销和不同的执行计划
- 选择连接方式:Oracle中有基于优化器的几种连接方式,对多表连接来说Oracle肯定会选择一个合适的连接方式进行连接
- 选择连接顺序:对多表连接来说Oracle会选择哪一对表先连接,选择这两张表中哪个表作为源数据表
- 选择数据的搜索路径:根据上面我们提到的相关选择,做出合适的数据搜索路径,产生相应的执行计划
- 在产生的执行计划中找到最优的执行计划
- 按照最优的执行计划执行