基于ORACLE的SQL语句优化

时间:2022-05-16 02:23:47

摘 要 本文从ORACLE内存角度简单讨论了SQL语句的优化方法。SQL语句由于其简单和容易上手致使大家对它的研究不对,其实无论是DBA还是前台程序员都应该有一些书写高效SQL语句的经验,这对于应用设计和系统日常维护都有很大帮助。

关键词 SQL语句优化 绑定变量 物化视图

中图分类号:TP312 文献标识码:A

SQL语言由IBM实验室的Donald Chamberlin及其同事在1974年定义,被称为结构化查询语言(Structured Query Language),现在SQL语言已经形成了标准的应用和开发体系。

1 SQL语句的使用

虽然很多数据库都对SQL语句进行了再开发和扩展,但是包括SELECT, INSERT, UPDATE, DELETE以及MERGE在内的标准的SQL命令仍然可以被用来完成几乎所有的数据库操作。

SELECT查询语句用来从一个或多个表中或者其他数据库对象中提取数据。SELECT 查询的一般格式是

5 select {[distinct|all] columns | *}

1 from {tables | views | other select}

2 where conditions

3 group by columns

4 having conditions

6 order by columns;

其中,每行代码前的数字表示了SELECT语句在ORACLE执行顺序。在执行查询语句时是由ORACLE的基于成本的优化器(cost-based optimizer,CBO)来负责编译的,因此SELECT查询语句的执行顺序和我们的逻辑思维有所不同。从执行顺序可以直观的看出,减少FROM语句涉及到的数据源数量,可以大幅减少数据访问量,增加SELECT查询语句的执行速度。

2 硬解析与软解析

为了不重复解析相同的语句,在每一次执行SQL语句前ORACLE会去检查内存中是不是存在相同的语句。在第一次解析SQL语句之后,ORACLE将SQL语句存放在系统全局内存区域SGA中。因此,当用户执行一个SQL语句时,如果它和之前执行过得语句完全相同,ORACLE会将取回之前的解析信息并重用,这种解析类型被称为软解析。相反的,如果之前没有执行过完全相同的语句,ORACLE会将它解析执行并把解析信息存入SGA中便于以后重用,这种解析类型被称为硬解析。不难看出,当数据块在内存中缓存时的访问速度要大于通过OS获取数据块的访问速度。

3 绑定变量的使用

一个硬解析不仅仅耗费大量的系统资源,更重要的是会占据重要的们闩(latch)资源。当一个SQL语句提交后,ORACLE会首先检查一下共享缓冲池(shared pool)里有没有与之完全相同的语句,如果有的话只须执行软解析即可,否则就得进行硬解析。有以下两条SQL语句:

SQL>select * from emp where deptno=10;

SQL>SELECT * FROM EMP WHERE DEPTNO=10;

这两条语句返回的结果集是完全相同的,也就是说对于用户来说这两条语句执行结果是相同的。现在来对v$sql表1进行查询。

从返回的结果可以发现,尽管这两条语句的结果是相同的,但是ORACLE认为它们是不同的。这是由于在执行SQL语句时,ORACLE首先将该语句字符的散列值作为它存放在SGA中的主键。当执行其他语句时,ORACLE会将执行语句的散列值与内存中现有的散列值一一比较。在执行字符转换散列值时,大写字母与小写字母产生的散列值是不同的。当使用绑定变量时,即使用户改变了绑定变量的值,ORACLE还是可以共享这个语句。

参考文献

[1] 尹萍.SQL Server数据库性能优化[J].计算机应用与软件,2005(4).

[2] 胡江奕.基于SQL Server的数据库应用系统性能的优化[J],2001,37(2).

上一篇:计算机信息安全及其防范技术 下一篇:让德育之花在高中信息技术课堂尽情绽放