本人很喜欢Oracle,在工作中也很喜欢总结关于Oracle SQL语句的经验教训,下面就这个问题来详细说说吧。数据库管理员还可以通过下述语句查看低效率的Oracle SQL语句,优化这些语句也有助于提高CPU的利用率。
成都创新互联-专业网站定制、快速模板网站建设、高性价比余杭网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式余杭网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖余杭地区。费用合理售后完善,十余年实体公司更值得信赖。
- 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
- SELECT dname, deptno FROM dept WHERE deptno NOT IN
- (SELECT deptno FROM emp);
◆ Oracle SQL语句B
- SELECT dname, deptno FROM dept WHERE NOT EXISTS
- (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数据库高效地运行。
【编辑推荐】
网页标题:大致分析Oracle SQL语句
文章转载:http://www.gawzjz.com/qtweb/news15/192515.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联