大致分析Oracle SQL语句

数据库 Oracle
这里介绍Oracle SQL语句,SQL语言是一种灵活的语言,相同的功能可以使用不同的语句来实现。但是语句的执行效率是很不相同的,程序员可以使用EXPLAIN PLAN语句来比较各种实现方案,并选出最优的实现方案。

本人很喜欢Oracle,在工作中也很喜欢总结关于Oracle SQL语句的经验教训,下面就这个问题来详细说说吧。数据库管理员还可以通过下述语句查看低效率的Oracle SQL语句,优化这些语句也有助于提高CPU的利用率。

  1. SELECT BUFFER_GETS, EXECUTIONS, SQL_TEXT FROM V$SQLAREA; 

查看数据库的冲突情况

数据库管理员可以通过V$SYSTEM_EVENT数据字典中的“latch free”统计项查看Oracle数据库的冲突情况,如果没有冲突的话,latch free查询出来没有结果。如果冲突太大的话,数据库管理员可以降低spin_count参数值,来消除高的CPU使用率。

Oracle SQL语句的调整原则

SQL语言是一种灵活的语言,相同的功能可以使用不同的语句来实现。但是语句的执行效率是很不相同的,程序员可以使用EXPLAIN PLAN语句来比较各种实现方案,并选出最优的实现方案。总得来讲,程序员写Oracle SQL语句需要满足考虑如下规则:

(1)尽量使用索引。试比较下面两条Oracle SQL语句:

◆ Oracle SQL语句A

  1. SELECT dname, deptno FROM dept WHERE deptno NOT IN  
  2. (SELECT deptno FROM emp); 

◆ Oracle SQL语句B

  1. SELECT dname, deptno FROM dept WHERE NOT EXISTS  
  2. (SELECT deptno FROM emp WHERE dept.deptno = emp.deptno); 

这两条查询语句实现的结果是相同的,但是执行语句A的时候,Oracle会对整个emp表进行扫描,没有使用建立在emp表上的deptno索引;执行语句 B的时候,由于在子查询中使用了联合查询,Oracle只是对emp表进行的部分数据扫描,并利用了deptno列的索引。所以,语句B的效率要比语句A 的效率高一些。

(2)选择联合查询的联合次序。

(3)在子查询中慎重使用IN或者NOT IN语句,使用where (NOT) exists的效果要好的多。

(4)慎重使用视图的联合查询,尤其是比较复杂的视图之间的联合查询。一般对视图的查询最好都分解为对数据表的直接查询效果要好一些。

(5)可以在参数文件中设置SHARED_POOL_RESERVED_SIZE参数,这个参数在SGA共享池中保留一个连续的内存空间,连续的内存空间有益于存放大的SQL程序包。

(6)Oracle公司提供的DBMS_SHARED_POOL程序可以帮助程序员将某些经常使用的存储过程“钉”在SQL区中而不被换出内存,程序员对于经常使用并且占用内存很多的存储过程“钉”到内存中有利于提高最终用户的响应时间。

至此,我们完成了对Oracle数据库的优化。Oracle数据库的性能优化调整是一个系统工程,涉及的方面很多。数据库管理员需要综合运用上面介绍的优化方法和规律,认真分析Oracle运行过程当中出现的各种问题,合理优化,才能保证Oracle数据库高效地运行。

【编辑推荐】

  1. 闲扯Oracle数据导入
  2. 精炼概括Oracle性能测试
  3. 简介Oracle INDEX提示
  4. 五分钟精通Oracle Hints
  5. 简单介绍Oracle驱动表
责任编辑:佚名 来源: 博客园
相关推荐

2009-03-04 09:06:56

优化sqlOracle

2010-04-26 14:32:21

Oracle SQL

2010-04-12 10:53:07

Oracle SQL

2011-08-18 14:25:26

OracleEXPLAIN PLA

2009-11-16 17:55:58

Oracle SQL语

2009-09-09 18:03:47

LINQ to SQL

2009-11-06 17:21:36

验证Oracle SQ

2010-04-13 14:36:17

Oracle性能检测

2009-12-21 10:01:05

Oracle技术

2009-11-05 18:07:33

Oracle导出sql

2010-04-13 15:04:16

Oracle优化

2009-11-06 17:13:24

Oracle SQL语

2010-04-29 12:05:21

Oracle使用SQL

2010-04-06 14:26:41

Oracle复制表

2009-11-17 13:35:40

Oracle SQL语

2010-04-20 15:22:34

Oracle SQL

2009-01-14 09:28:12

OracleSQL10g

2010-04-12 14:22:13

Oracle性能sql语句

2010-04-29 14:06:40

Oracle SQL

2010-04-13 15:23:03

Oracle 9i s
点赞
收藏

51CTO技术栈公众号