oracle中sql查询优化研究论文

oracle中sql查询优化研究论文

ID:10028286

大小:33.50 KB

页数:12页

时间:2018-05-21

oracle中sql查询优化研究论文 _第1页
oracle中sql查询优化研究论文 _第2页
oracle中sql查询优化研究论文 _第3页
oracle中sql查询优化研究论文 _第4页
oracle中sql查询优化研究论文 _第5页
资源描述:

《oracle中sql查询优化研究论文 》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、ORACLE中SQL查询优化研究论文ORACLE中SQL查询优化研究论文ORACLE中SQL查询优化研究论文ORACLE中SQL查询优化研究论文ORACLE中SQL查询优化研究论文ORACLE中SQL查询优化研究论文ORACLE中SQL查询优化研究论文ORACLE中SQL查询优化研究论文ORACLE中SQL查询优化研究论文  摘要数据库性能问题一直是决策者及技术人员共同关注的焦点,影响数据库性能的一个重要因素就是SQL查询语句的低效率。论文首先分析了导致SQL查询语句性能低下的四个常见原因以及SQL调优的一般步骤,然后分别针对如何降低I/O操作、在查询语句中如何避免对查

2、询结果的高成本操作以及在多表连接时如何提高查询效率进行了分析。  关键词ORACLE;SQL;优化;连接  1引言  随着网络应用不断发展,系统性能已越来越引起决策者的重视。影响系统性能的因素很多,低效的SQL语句就是其中一个不可忽视的重要原因。论文首先分析导致SQL性能低下的常见原因,然后分析SQL调优应遵循的一般步骤,最后从如何降低I/O、避免对查询结果的高成本操作和多表连接中如何提高SQL性能进行了研究。鉴于目前ORACLE在数据库市场上的主导地位,论文将只针对ORACLE进行讨论。  2影响SQL性能的原因  影响SQL性能的因素很多,如初始化参数设置不合理、导

3、入了不准确的系统及模式统计数据从而影响优化程序(CBO)的正确判断等,这些往往和DBA密切相关。纯粹从SQL语句出发,笔者认为影响SQL性能不外乎以下四个重要原因:  (1)在大记录集上进行高成本操作,如使用了引起排序的谓词等。  (2)过多的I/O操作(含物理I/O与逻辑I/O),最典型的就是未建立恰当的索引,导致对查询表进行全表扫描。  (3)处理了太多的无用记录,如在多表连接时过滤条件位置不当导致中间结果集包含了太多的无用记录。  (4)未充分利用数据库提供的功能,如查询的并行化处理等。  第(4)个原因处理起来相对简单。论文将针对前三个原因论述如何提高SQL查询

4、语句的性能。  3SQL优化的一般步骤  SQL优化一般需经过发现问题、分析问题、提出解决措施、应用措施、测试性能几个步骤,如图1所示。“发现问题就是解决问题的一半”,因此在SQL调优过程中,定位问题SQL是非常重要的一步,一般可借助于ORACLE自带的性能优化工具如STATSPACK、TKPROF、AUTOTRACE等辅助用户进行,同时还应该重视动态性能视图如V$SQL、V$MYSTAT、V$SYSSTAT等的研究。  图1SQL优化的一般步骤  4SQL语句的优化  优化排序操作  排序的成本十分高昂,当在查询语句中使用了引起结果集排序的谓词时,SQL性能必然受到影

5、响。  排序过程分析  当待排序数据集不是太大时,服务器在内存(排序区)完成排序操作,如果排序需要更多的内存空间,服务器将进行如下处理:  (1)将数据分成多个小的集合,对每一集合进行排序。  (2)服务器向磁盘申请临时空间,将排好序的中间结果写入临时段,再对另外的集合进行排序。  (3)在所有的集合均排好序后,服务器再将它们进行合并得到最终的结果,如果排序区尺寸太小,合并无法一次完成时,将分多次进行。  从上述分析可知,排序是一种十分昂贵的操作,它消耗大量的CPU时间和内存,触发磁盘分页和交换操作,因此只要有可能,我们就应该在SQL语句中尽量避免排序操作。  中引起排

6、序的操作  SQL查询语句中引起排序的操作大致有:ORDERBY和GROUPBY从句;DISTINCT修饰符;UNION、INTERSECT、MINUS集合操作符;多表连接时的排序合并连接(SORTMERGEJOIN)等。  如何避免排序  1)建立恰当的索引  对经常进行排序和连接操作的字段建立索引。在建立索引后,当服务器向这些字段发出排序请求时,将直接引用索引而不进行排序操作;当进行等值连接查询操作时,若建立连接的字段未建立索引,服务器进行的是排序合并连接(SORTMERGEJOIN),连接操作的过程如下:  对进行连接的两个或多个表分别进行全扫描;  对每一个表中

7、的行集分别进行全排序;  合并排序结果。  如果建立连接的字段已建立索引,服务器进行嵌套循环连接(NESTEDLOOPJOINS),该连接方式不需要任何排序,其过程如下:  对驱动表进行全表扫描;  对返回的每一行利用连接字段值实施索引惟一扫描;  利用从索引扫描中返回的ROWID值在从表中定位记录;  合并主、从表中的匹配记录。  因此,建立索引可避免多数排序操作。  2)用UNIIONALL替换UNION  UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。大部分应用中

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。