`

SQL语句处理过程

 
阅读更多

sql优化首先了解SQL的执行过程

1. SQL语句处理过程

open-->parse-->bind-->execute-->fetch-->close

2. SQL语句详细处理过程

DML语句和SELECT查询语句都会经历如下过程:
2.1. Create a Cursor
2.2. Parse the Statement
2.5. Bind Aany Variables
2.7. Run the Statement
2.8. Close the Cursor

可选过程:
2.6. Parallelize the Statement

SELECT语句,带有Returning的子句的DML语句要求如下处理过程:
2.3. Describe Results of a Query
2.4. Define Output of a Query
2.8. Fetch Rows of a Query

3. 解析

在共享池中是否存在共享的SQL,语法检查,语义检查,权限检查,确定最佳执行计划。
解析是一个昂贵的操作,其中生成执行计划是最耗时的,应该避免重复解析,解析一次,多次执行。


将用户的SQL文本转换成oracle认识且可执行的语句,这个过程叫做解析过程。

解析分为软解析和硬解析。

当客户端发出一条SQL语句进入shared pool时,oracle首先将SQL文本转换成ASCII字符,然后根据hash函数计算对应的hash_value,然后到library catch中查找是否存在该SQL语句。

如果不存在,进行硬解析,步骤:

(1. 语法检查。失败退出解析。
(2. 到数据字典校验SQL语句涉及的对象和列是否都存在。失败退出解析。
(3. 将对象进行名称转换,比如将同名翻译成实际的对象等。失败退出解析。
(4. 检查游标里用户是否居有访问SQL语句里面所引用的对象的权限。失败退出解析。
(5. 通过优化器创建最优的执行计划,这一步是最耗CPU资源的。
(6. 将该游标产生的执行计划,SQL文本等装载进library cache中。

如果存在,说明该SQL以前运行过,于是进行软解析。软解析是相对于硬解析而已,如果从硬解析中去掉一些步骤,就是软解析。软解析分为三种类型。

(1. 某个sesison发出的SQL语句在library catch里其他session发出的SQL语句一致。这是,该解析过程可以将硬解析的5和6步骤去掉,但是仍然要进行硬解析的2,3,4步骤。

(2. 某个sesison发出的SQL语句在library catch里同一个session发出的SQL语句一致。该解析过程可以将硬解析的2,3,5和6步骤去掉,仍然需要4步骤进行权限检查,因为可能通过grant改变了该session用户的权限。

(3. 当设置了初始化参数session_cached_cursors时,当某个session对相同的cursor进行第三次访问时,将在该session的PGA里创建一个标记,并且该游标即使已经关闭也不会从library cache中交换出去。这样,该session以后再执行相同的SQL时,将跳过硬解析的所有步骤。这种情况下是最高效的解析方式,但是将会消耗很大的内存。

4. 绑定变量

找到绑定变量,给绑定变量分配值,减少硬解析,从共享执行计划中获益。

5. 执行

如果是DML语句,则锁定修改的行,知道提交和回滚。
如果是查询语句,则不锁定任何行。
执行必要的I/O与排序

6. 提取

为查询和带有returning子句的DML语句返回行
如果需要,进行排序
使用批量提取改进性能

Oracle没次可以fetch多行,在SQL*PLUS中使用ARRAYSIZE修改设定。
show arraysize;
set arraysize 100.

一般来讲,如果arraysize设定超过100,对性能的改善就没有任何实际意义了。
分享到:
评论

相关推荐

    Oracle Sql语句转换成Mysql Sql语句

    本项目提供了一个Java源码工具,能够帮助用户便捷地将Oracle SQL语句转换为MySQL SQL语句。 Oracle SQL与MySQL SQL的主要差异在于以下几个方面: 1. **数据类型**:Oracle支持的数据类型如NUMBER、LONG、RAW等在...

    SQL语句执行过程详解

    SQL语句执行过程是一个涉及到客户端与服务器端交互、多个阶段的复杂过程,包含了对SQL语句的处理、解析、优化以及最终的执行。这个过程对于数据库管理员来说,需要对数据库内部结构有深入的了解,才能够完全掌握。 ...

    Java打印漂亮的SQL语句(被格式化的SQL语句)

    在Java编程中,调试SQL语句是开发过程中的常见任务,尤其当面对复杂且冗长的查询时。为了提高效率并使SQL语句更易于理解和分析,格式化SQL语句显得尤为重要。标题提及的"Java打印漂亮的SQL语句(被格式化的SQL语句)...

    存储过程中怎么动态执行sql语句

    通过以上两个示例可以看出,在Oracle存储过程中实现动态SQL语句的关键在于利用`EXECUTE IMMEDIATE`动态执行SQL语句以及通过创建包的方式来实现更为复杂的动态数据处理逻辑。这两种方法不仅提高了代码的灵活性,还...

    SQL语句处理为C#/VBNet下的代码格式

    【标题】"SQL语句处理为C#/VBNet下的代码格式"主要涉及到的是将SQL查询语句转换成C#或VB.NET代码的过程。这通常在开发.NET应用时,特别是需要在应用程序中执行动态SQL或者存储过程时发生。下面将详细阐述这个过程中...

    sql语句命令-sql语句命令sql语句命令

    SqlCommand对象允许我们发送SQL查询、存储过程或其他Transact-SQL语句到数据库。例如: ```csharp SqlCommand cmd = new SqlCommand(sqlCommandText, conn); int result = cmd.ExecuteNonQuery(); // 对于非查询...

    泛微系统SQL语句大全

    本资源集合了泛微系统中与SQL Server数据库交互时常用的各种SQL语句,涵盖了组织架构、流程管理以及自定义需求等多个方面。以下是对这些SQL语句知识点的详细解释: 1. **组织架构相关SQL**: - 组织架构是企业信息...

    Delphi adoquery处理多条SQL语句

    ### Delphi ADOQuery 处理多条 SQL 语句 在 Delphi 开发环境中,ADOQuery 是一种常用的数据库查询组件,它支持多种数据库操作,包括执行 SQL 语句、查询数据等。本文将详细解释如何使用 Delphi 的 ADOQuery 组件来...

    SQL Server中存储过程比直接运行SQL语句慢的原因

    SQL Server 中存储过程比直接运行 SQL 语句慢的原因 在 SQL Server 中,存储过程比直接运行 SQL 语句慢的原因是 Parameter sniffing 问题。Parameter sniffing 是指 SQL Server 在执行存储过程时,使用参数的统计...

    自动生成SQL语句_C#_sql_

    Dapper支持动态SQL和参数化查询,可以在C#代码中拼接SQL语句,并自动处理参数绑定,减少了SQL注入的风险。 三、手工构建SQL字符串 如果你不希望使用ORM,也可以手工构建SQL字符串。C#的string类提供了丰富的字符串...

    oracle sql语句执行流程解析

    以上整个流程涵盖了SQL语句从客户端提交到服务器端处理,再到执行以及优化的全过程。了解这个流程对于数据库管理员和开发人员来说是非常重要的,因为它直接影响到数据库操作的效率和数据访问的速度。通过熟悉这些...

    完成超长SQL语句执行前拆分

    - `SqlStr`:需要被处理的原始SQL语句。 - `keyWordSql`:标识SQL语句中的关键字(例如INSERT或UPDATE),用于确保每个分割后的SQL语句的完整性。 - `SqlMaxLen`:表示单个SQL语句的最大长度,如果原始SQL语句超过了...

    基本SQL语句及PL/SQL语句

    标题中的“基本SQL语句及PL/SQL语句”涵盖了关系数据库管理中两个重要的概念:SQL(Structured Query Language)和PL/SQL(Procedural Language/SQL)。SQL是用于管理和处理关系数据库的标准语言,而PL/SQL是Oracle...

    SQL 执行超长语句

    在数据库管理与开发过程中,编写SQL语句是必不可少的一环。有时,我们可能会遇到需要执行非常长的SQL语句的情况。这些超长语句可能由于包含大量的条件、子查询或是数据量较大等原因而变得异常复杂。本文将围绕“SQL...

    SQL语句辅助工具

    C#具有丰富的类库和强大的.NET框架支持,可以与数据库进行交互,但编写SQL语句的过程相对繁琐,尤其是在处理大量数据操作时。 "SQL语句辅助工具"通过自动化这个过程,大大提升了开发效率。它能够解析SQL语句,并...

    sqlserver自动生成sql语句工具sqlserver转oracle

    本篇文章将详细探讨如何利用工具实现SQL Server自动生成SQL语句并转换到Oracle。 首先,标题中的"sqlserver自动生成sql语句工具"指的是可以分析SQL Server数据库结构和数据,自动生成对应的SQL创建语句的软件。这种...

    OA系统常用SQL语句

    2. **公文档案**:在公文处理过程中,SQL语句可以用于查询、存储和更新文档状态。例如,"批复意见回填表单.doc"和"将处理人姓名与处理时间回填表单字段.doc"可能涉及到对审批流程记录的管理,通过SQL语句更新这些...

    SQL 语句大全 SQL 语句大全

    - **存储过程**:预编译的SQL语句集合,可封装复杂的业务逻辑,提高效率和安全性。 - **触发器**:在特定数据库操作(如INSERT、UPDATE或DELETE)发生时自动执行的代码段。 9. **窗口函数** - **ROW_NUMBER()、...

    Effective MySQL之SQL语句最优化.pdf

    最优化的SQL语句能够在最小的资源消耗下,完成特定的数据库操作,并且保证响应速度和数据处理效率。 2. MySQL数据库简介:MySQL是一个开放源代码的关系型数据库管理系统,广泛应用于Web应用中。它使用结构化查询...

    E10查用SQL语句集合E10查用SQL语句集合

    名称:E10查用SQL语句集合 适用人群:ERP管理员 适用场景:E10ERP系统上线持续改善,SQL常用语句 功能描述:PO待交明细、出入库统计表、待领料清单、请购中品号无单价的品号清单、请购单中无品号采购信息的品号清单 ...

Global site tag (gtag.js) - Google Analytics