一 、 sql 的执行过程
通常情况下,SQL语句的执行过程如下:
a.SQL代码的语法(语法的正确性)及语义检查(对象的存在性与权限)。
b.将SQL代码的文本进行哈希得到哈希值。
c.如果共享池中存在相同的哈希值,则对这个命令进一步判断是否进行软解析,否则到e步骤。
d.对于存在相同哈希值的新命令行,其文本将与已存在的命令行的文本逐个进行比较。这些比较包括大小写,字符串是否一致,空格,注释
等,如果一致,则对其进行软解析,转到步骤f。否则到d步骤。
e.硬解析,生成执行计划。
f.执行SQL代码,返回结果。
二、硬解析,软解析
不能硬解析的情况:对象大小写不同,值不同。
三、硬解析的弊端
硬解析即整个SQL语句的执行需要完完全全的解析,生成执行计划。而硬解析,生成执行计划需要耗用CPU资源,以及SGA资源。在此不
得不提的是对库缓存中闩的使用。闩是锁的细化,可以理解为是一种轻量级的串行化设备。当进程申请到闩后,则这些闩用于保护共享内存
的数在同一时刻不会被两个以上的进程修改。在硬解析时,需要申请闩的使用,而闩的数量在有限的情况下需要等待。大量的闩的使用由此
造成需要使用闩的进程排队越频繁,性能则逾低下。
四、硬解析和软解析效率比较
1.创建一个测试表
create table efftable
(
idd integer
);
2.创建无参数绑定存储过程
create or replace procedure pro_notbind as
begin
for i in 1..1000 loop
execute immediate 'insert into efftable (idd) values ('
|| i || ')';
end loop;
commit;
end;
3.创建参数绑定存储过程
create or replace procedure pro_bind as
begin
for i in 1..1000 loop
execute immediate 'insert into efftable (idd) values (:x)'
using i;
end loop;
commit;
end;
4.分别执行pro_notbind ,pro_bind
执行pro_notbind 花费的时间大约为11s
执行pro_bind 花费的时间大约为0.047s
另外也可以sql记录表v$sqlarea中查询sql的执行情况:
第一个在v$sqlarea有1000条记录。
五、编码硬解析的改进方法
1.更改参数cursor_sharing
参数cursor_sharing决定了何种类型的SQL能够使用相同的SQL area
CURSOR_SHARING = { SIMILAR | EXACT | FORCE }
EXACT --只有当发布的SQL语句与缓存中的语句完全相同时才用已有的执行计划。
FORCE --如果SQL语句是字面量,则迫使Optimizer始终使用已有的执行计划,无论已有的执行计划是不是最佳的。
SIMILAR --如果SQL语句是字面量,则只有当已有的执行计划是最佳时才使用它,如果已有执行计划不是最佳则重新对这个SQL
--语句进行分析来制定最佳执行计划。
2.使用绑定变量 绑定变量要求变量名称,数据类型以及长度是一致,否则无法使用软解析
六、总结
1.尽可能的避免硬解析,因为硬解析需要更多的CPU资源,闩等。
2.cursor_sharing参数应权衡利弊,需要考虑使用similar与force带来的影响。
3.尽可能的使用绑定变量来避免硬解析。
分享到:
相关推荐
Java的SQL解析器JSQLPaser是一个强大的开源库,专门设计用于处理SQL语句的解析工作。这个库允许开发者分析SQL语句的结构,提取出其中的关键元素,如列名、表名、别名以及查询条件,从而在Java应用程序中实现对SQL的...
这个工具在数据库管理和数据分析领域具有广泛的应用价值,对于理解和优化复杂的数据库结构,以及提升数据处理效率具有重要意义。 【描述】"基于gsp的SQL解析工具"的核心在于GSP,这是一个强大的开源SQL解析库,它...
在IT行业中,C++是一种强大的编程语言,常用于构建高性能的应用程序,包括数据库接口和解析器。...通过解析存储过程,可以自动化一些元数据的提取工作,提高开发效率,并有助于理解和优化数据库设计。
文章链接中提到的博客详细介绍了SQL解析的过程,它可能涉及使用如ANTLR或JavaCC等解析器生成器来创建自定义的SQL解析器。这些工具可以生成符合特定SQL语法规则的解析代码,使得开发人员能够根据需求定制解析逻辑。 ...
总的来说,基于Gudusoft的SQL解析项目为开发者提供了强大的SQL处理能力,帮助他们更好地理解和操作数据库,提升开发效率。通过深入理解和利用这个工具,可以解决许多数据库相关的复杂问题,推动项目的成功实施。
SQL解析器是数据库管理系统中的一个重要组成部分,它负责将用户输入的SQL语句转换为可执行的内部表示,以便系统能够理解和执行查询。本篇文章将深入探讨SQL解析器的工作原理、重要性以及开源工具`jsqlparser`的相关...
ANTLR4(ANother Tool for Language Recognition)是一款强大的解析器生成器,广泛...对于想要深入理解SQL解析、Spark和Flink的工作原理,以及如何构建跨平台的SQL解析工具的开发者来说,这是一个非常有价值的资源。
SQL存储过程是数据库管理系统中一组为了完成特定功能的SQL语句集,它可以被命名并保存,然后在需要的时候调用,极大地提高了SQL代码的重用性和执行效率。在这个实例中,我们看到一个名为`Sum_wage`的存储过程,它的...
SQL解析是将用户输入的SQL语句转换为解析树的过程,这是一个数据结构,表示了SQL语句的语法结构。这个过程通常由数据库管理系统(DBMS)内部的解析器完成,但它也可以通过编程方式实现,比如使用Python。Python有...
它帮助确保数据的准确性和一致性,减少错误,提高数据治理的效率。 6. **文件名"getStmtTables"**:根据提供的文件名,这可能是解析SQL语句以获取所涉及表格列表的代码或工具的一部分。这可能是一个函数或脚本,...
SQL Server 2005及更高版本引入了XML数据类型,它允许直接在数据库中存储XML文档,并提供了内置函数和方法来解析和操作XML数据。`a.xml`文件可能包含如下结构的XML数据: ```xml <name>John Doe <position>...
优化阶段可能包括查询重写,以提高查询效率,例如通过添加索引、消除冗余子查询等。错误处理则涉及到检测和报告SQL语句中的语法错误,帮助用户快速定位和修复问题。 在实际应用中,SqlParser的使用场景广泛,例如在...
ANTLR(ANother Tool for Language Recognition)是一个强大的解析工具,常用于构建语法分析器,它可以将源代码转换成抽象语法树(AST...这些工具可以自动化处理SQL语句,提高开发效率,并确保SQL代码的质量和兼容性。
SQL解析的过程通常分为以下几个步骤: 1. **词法分析**:ANTLR的词法分析器(Lexer)将输入的SQL字符串拆分成一系列的标记(Token),每个标记代表一个词汇单元,如关键字、标识符、数字、字符串等。 2. **语法...
按照标准的SQL解析顺序,它依次为: 1. FROM子句:此阶段将从各个数据源(如表或视图)中组合数据,生成初步的结果集。 2. WHERE子句:在此阶段,根据指定的条件过滤结果集中的记录。 3. GROUP BY子句:用于将数据...
以下是一些针对提高 SQL 执行效率的重要知识点: 1. **选择最有效的表名顺序**:在 FROM 子句中,Oracle 从右到左处理表,所以应该先处理记录数最少的表,以减少扫描的数据量。对于多表联接,基础表(被其他表引用...
Spark 框架 SQL 部分解析过程 SparkSQL 是 Spark 技术体系中较有影响力的应用(Killer application),也是 SQL-on-Hadoop 解决方案中举足轻重的产品。本书由 11 章构成,从源码层面深入介绍 Spark SQL 内部实现...
《基于SQL语法解释器JSqlParser的SQL解析工具详解》 在信息技术领域,数据库操作是不可或缺的一部分,而SQL(Structured Query Language)作为数据库查询和管理的主要语言,其正确理解和高效处理至关重要。为了帮助...
10. **存储过程与函数**:存储过程和用户自定义函数是预编译的SQL语句集合,可以封装复杂的业务逻辑,提高代码重用性和安全性。 11. **游标**:游标允许逐行处理查询结果,这对于循环处理数据或执行动态SQL非常有用...
在IT行业中,数据库管理和查询是核心任务...理解并掌握这些知识点,对于提升数据库操作的效率和安全性具有重要意义。在实际开发中,灵活运用Spring提供的工具和机制,可以大大提高SQL文管理的便捷性和项目的可维护性。