Oracle数据库的里的sql执行过程如下图所示:

sql server 执行SQL怎么监控当前SQL执行信息 查看sql执行过程_数据

 

当客户端提交执行SQL语句的时候,oracle会做出以下步骤:

  1. 查询高速缓冲区:当客户端将SQL语句发送给服务器端的时候,服务器进程会在数据库的高速缓存中查询是否存在相同的执行语句如果存在则直接执行缓存中的已检验过的SQL语句。这样可以提高 SQL 语句的查询效率。
  2. 进行语法检查:如果高速缓冲区没有存在相同的执行语句,服务器进程则会对该sql语句进行语法检查,看其是否合乎语法规定。例如错将关键字“FROM”写成“FORM”,将“SELECT”写成“SELET”等。
  3. 进行语义检查:服务器进程对语句中的字段、表等内容进行检查。看看这些字段、表是否在数据库中。
  4. 权限检查:检查SQL语句中的访问对象是否存在及该用户是否具备相应的权限。
  5. 查询转换:Oracle会对某些类型的查询转换(比如子查询展开、复杂视图合并等)分别计算经过查询转换后的等价改写SQL的成本和原始SQL的成本。
  6. 查询优化:Oracle会根据不同的优化器类型(CBO Rule-Based Optimization 基于规则的优化器 或 RBO Cost-Based Optimization 基于代价的优化器)采用不同的判断原则,从执行完查询转换后得到的目标SQL的诸多可能的执行路径中选择一条效率最高的路径来作为其执行计划。
  7. 语句执行:语句执行也分两种情况。一是若被选择行所在的数据块已经被读取到数据缓冲区的话,则服务器进程会直接把这个数据传递给客户端,而不是从数据库文件中去查询数据。若数据不在缓冲区中,则服务器进程将从数据库文件中查询相关数据,并把这些数据放入到数据缓冲区中(buffer cache),返回给客户端。