关于SQL文优化问题总结

来源 :企业导报 | 被引量 : 0次 | 上传用户:InsideASPNET
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  【摘 要】实际系统中遇到性能问题是非常常见的,性能优化有许多方面,其中包括硬件方面,软件方面,包括服务器端,客户端等等。本文重点基于ORACLE分析了影响SQL文性能的原因,然后列举了几点性能优化的对策,希望给开发人员在编码时提供帮助,给SQL的性能问题调查者提供一个方向。
  【关键词】ORACLE;性能问题;SQL文优化
  一、问题提出
  之前有个项目,其中的批处理定期调用一个存储过程,在测试环境中运行没有问题,但是正式运行出现了错误,执行存储过程时出现了错误:提示是表空间不足。为了解决这个问题,笔者对SQL文的性能优化进行了学习和研究。
  二、问题调查与解决
  由于该存储过程内容比较多,大概有3000多行,也不能判断那部分出了问题,首先在可能出现问题的地方追加了LOG信息。由于测试环境中该问题不能再现,所以代码更新到了实际环境中进行运行,通过LOG发现是在执行某个SQL文时出的错误,这个SQL文涉及到了10多个表,而其中表中的数据量比较大。执行时用到的临时表空间高达40G,后来通过调查对SQL的进行了调整,只是修改了WHERE条件中其中两个条件的顺序,这个问题就解决了。
  三、SQL文性能原因分析
  (1)在大记录集上进行高成本操作,如使用了引起排序的谓词等。(2)过多的I/O操作(含物理I/O与逻辑I/O),最典型的就是未建立恰当的索引,导致对查询表进行全表扫描。减少访问数据库的次数,就能实际上减少ORACLE的工作量。(3)处理了太多的无用记录,如在多表连接时过滤条件位置不当导致中间结果集包含了太多的无用记录。(4)未充分利用数据库提供的功能,如查询的并行化处理等。
  四、SQL文性能优化总结
  (1)建立恰当的索引。对经常进行排序和连接操作的字段建立索引。(2)避免使用”*”,SQL文中引用”*”,使用起来的确非常方便,但是效率非常低,主要是ORACLE在解析的过程中,会将”*”一次转化成所有的列名,这个工作是通过查询数据字典完成的。这就意味着消耗更多的时间。(3)尽量避免多表关联。(4)避免使用消耗资源的操作,带有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的SQL语句会启动SQL引擎执行消耗资源的排序功能。DISTINCT需要一次排序操作,其他的至少需要执行二次排序。通常带有执行UNION,MINUS,INTERSECT的SQL语句都可以通过其他方式回避。例如:SELECT DISTINCT A.NO,A.NAME FROM A,B WHERE A.NO=B.NO可以替换为效率更高的EXISTS来实现,SELECT A.NO,A.NAME FROM A WHERE EXISTS(SELECT 1 FROM B WHRE B.NO=A.NO)。(5)避免在索引列上使用函数。例如:
  SELECT NO FROM A WHERE A.SCORE * 2>180可以修改为SELECT NO FROM A WHERE A.SCORE>180/2。(6)避免在索引列上使用NOT。NOT会产生和在索引列上使用函数相同的影响。当ORACLE遇到NOT时,他就会停止使用索引转而执行全表扫描。(7)避免在索引列上使用IS NULL,IS NOT
  NULL。(8)减少对表的查询。在含有自查询的语句中,要特别注意减少对表的查询。(9)注意WHERE字句的连接顺序。ORACLE原则上采用自下而上的顺序解析WHERE子句,根据据这个原理,当在WHERE子句中有多个表联接时,WHERE子句中排在最后的表应当是返回行数可能最少的表,有过滤条件的子句应放在WHERE子句的最后。(10)使用表的别名(Alias):当在SQL语句中连接多个表时,请使用表的别名并把别名前缀于每个Column上.这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误。(11)用EXISTS替代IN、用NOT EXISTS替代NOT IN。在許多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接,在这种情况下,使用EXISTS(或NOT EXISTS)通常将提高查询的效率。在子查询中,NOT IN子句将执行一个内部的排序和合并。无论在哪种情况下,NOT IN都是最低效的(因为它对子查询中的表执行了一个全表遍历)。为了避免使用NOT IN,我们可以把它改写成外连接(Outer Joins)或NOT EXISTS。(12)sql语句用大写的。因为oracle总是先解析sql语句,把小写的字母转换成大写的再执行。(13)用>=替代>。高效:SELECT*FROM EMP
  WHERE DEPTNO>=4;低效:SELECT*FROM EMP WHERE DEPTNO>3。两者的区别在于,前者DBMS将直接跳到第一个DEPT等于4的记录而后者将首先定位到DEPTNO=3的记录并且向前扫描到第一个DEPT大于3的记录。
  SQL语言在数据库应用中占有非常重要的地位,其性能的优劣直接影响着整个信息系统的可用性。因此对于开发人员来说,理解SQL调优的基本原理,这样可能避免一些不必要的问题。理论上SQL的优化方法很多,具体的效果好需要在实际的环境中进行验证。有可能需要多个方法并用。
  参 考 文 献
  [1]徐凤梅.关系数据库中SQL语言查询的优化策略[J].广西轻工业.2009(5)
其他文献
中国能源建设集团浙江火电建设有限公司焊接与检测工程公司是集焊接培训、无损检测、技能鉴定等为一体的综合工程技术公司(下称浙江火电焊接与检测工程公司).近年来,浙江火电
期刊
本文通过对荣华二采区10
期刊
【摘 要】日益加快的电业发展,对于电网调度的智能化、一体化提出了更新更高的要求。如何在现有的调度系统中,实现系统框架的目标,实现调度的一体化是本文研究和分析的关键。结合了现有电网的特点,简述了智能电网的发展情况以及发展目标和趋势,探讨了一体化调度中的数据服务、仿真、实时调度运算、数据库等相关技术。  【关键词】智能电网;调度控制;一体化管理;数据库  随着科学技术的发展和电力工业技术的进步,如何
企业管理人员作为企业经营运行的核心要素之一,在面对竞争激烈的市场环境下,企业管理人员有着较大的工作压力.基于企业管理人员压力现状进行分析,提出相对应的管理对策,从主
在企业建设与发展的过程中,党组织对于完善企业的人才管理机制,发挥了重要作用.基于此,本文就如何发挥党组织在企业选人用人中的主导作用展开分析,简要介绍了以往党组织在企
企业管理使企业的运作效率大大增强;让企业有明确的发展方向;使每个员工都充分发挥他们的潜能;向顾客提供满足的产品和服务;树立企业形象,为社会多做实际贡献.
目的探讨右美托咪定减轻人工流产(人流)术中手术应激反应的效果。方法接受无痛人流术患者80例,均采用丙泊酚2mg/kg麻醉。随机均分为四组:D1组麻醉诱导前10min内输注右美托咪
广大基层干部是做好基层工作的骨干力量,在全面建设小康社会、推进中国特色社会主义事业中具有十分重要的作用.在分析基层干部功能的基础上,具体阐述了基层干部培养选拔激励
医院人事档案建档时间长、载体较多、数量庞大,且涉及方方面面的内容,加强医院人事档案管理,有利于优化人力资源配置,促进医院的平稳、健康发展.因此医院各级领导要高度重视
党的十九大以来,不断加强党对一切工作的领导,也对国有企业党建工作提出了新的更高要求,而国有企业如何正确领会党建工作的重要性,并通过不断创新开展党建工作,推动企业深化