`
lxf3339
  • 浏览: 61425 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

Oracle 简单的SQL调优

阅读更多

今天刚看到一篇简单的SQL调优,自己也试了一下优化。原文如下:

        http://valen.blog.ccidnet.com/blog-htm-do-showone-uid-51502-type-blog-itemid-291732.html

    也做了一个简单的测试并做延伸

      Oracle数据库中,有个表:COST_LEDG_H(数据大约300多万)

     执行语句:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->select max(INIT_UNIT_COST),max(INIT_UNIT_COST) from COST_LEDG_H;

 

    执行计划如下:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->| Id  | Operation             | Name               | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT      |                    |     1 |     4 |  1442   (5)| 00:00:18 |
|   1 |  SORT AGGREGATE       |                    |     1 |     4 ||          |
|   2 |   INDEX FAST FULL SCAN| COST_LEDG_H_INDEX1 |  3106K|    11M|  1442   (5)| 00:00:18 |

  这里发现索引是:INDEX FAST FULL SCAN , 后面大约有6千多个IO次数,

  通过下列语句查看索引的IO次数:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> select leaf_blocks 叶块数, blevel 级别, distinct_keys 不同值, clustering_factor 集的势  from  user_indexes  where index_name=upper('COST_LEDG_H_INDEX1');

  输出结果如下: 

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->叶块数                    级别                     不同值                   集的势                    
---------------------- ---------------------- ---------------------- --------------
6253                   2                      5418                   1107960    

   这时发现该索引的全部页IO次数也是6千多次。这样以来可以确定索引是全部扫描,从根部一直到叶全部扫描了一遍。效率很低:

  原因:

     我们看看为何Oracle数据库为何要全部扫描索引,我们先来看看索引查询方式,索引只有两种查询:

       1,通过索引方式(向前或后向后查询)     

       2,非索引查找(全部索引搜索)

    这里我们看到这里Oracle采用了第2种查询方式,效率比较低,因为这里是一个最大,和一个最小值,数据库如果从第1种方式查也是必需从头到尾的查询其实也就是第二种方式。这里只是一次索引查询的结果。如果是两次索引查询,就可以大大提高查询性能。

  如改写成如下语句:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->select  min(INIT_UNIT_COST) from COST_LEDG_H
union all  select max(INIT_UNIT_COST)  from COST_LEDG_H;

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->select (select  min(INIT_UNIT_COST) from COST_LEDG_H)
,(
select max(INIT_UNIT_COST)  from COST_LEDG_H) from dual

 

 扩展:

   这次我在SQL server 2005中查询类似语句,速度很快,看了一下执行计划,SQL server 2005 智能的将一次查询索引分成了两次索引查找。这点SQL server 2005 要比Oracle 10gR2要聪明一些。

 

 

分享到:
评论

相关推荐

    ORACLE 19C SQL调优指南 中文版 Oracle DBA

    Oracle 19C SQL调优是数据库管理员(DBA)日常工作中不可或缺的一部分,它涉及到优化SQL查询性能,提高数据库系统的整体效率。本指南针对Oracle 19C版本,提供了丰富的调优策略和技术,旨在帮助DBA们更好地管理和维护...

    Oracle 19C SQL调优指南 中文版 DBA优化利器

    《Oracle 19C SQL调优指南》是针对Oracle数据库管理员(DBA)的重要参考资料,尤其适合那些希望提升SQL性能的专业人士。SQL调优是数据库管理中的核心技能,它关乎到系统的响应时间、资源利用率和整体性能。Oracle 19C...

    ORACLE 19C SQL调优指南.chm

    Oracle 19C SQL调优优化指南,全面提升SQL优化能力,DBA必备,开发必备

    Oracle Sql性能调优.ppt

    Oracle Sql 性能调优 Oracle SQL 性能调优是一个非常重要的课题,它涉及到 Oracle 数据库的性能优化,包括 SQL 语句优化、索引使用优化、多表关联查询操作优化、SQL 执行计划优化等。下面是Oracle SQL 性能调优的...

    ORACLE_SQL调优

    ORACLE_SQL调优老方块出品,深入讲解了ORACLE原理及常见SQL调优技巧

    oracle的sql调优宝典

    ### Oracle的SQL调优宝典 #### 概述 Oracle数据库是业界领先的数据库管理系统之一,在企业级应用中占据着举足轻重的地位。随着数据量的不断增长以及业务复杂度的提升,对Oracle数据库的性能优化变得尤为重要。SQL...

    ORACLE执行计划和SQL调优

    【Oracle执行计划和SQL调优】是数据库管理中至关重要的环节,主要涉及到如何高效地运行SQL语句,提高数据库性能。下面将详细讲解执行计划的相关概念以及SQL调优的策略。 1. **Rowid的概念**:Rowid是Oracle数据库中...

    oracle ocm sql调优教程

    总的来说,这个教程将带你深入理解Oracle数据库的SQL调优技巧,从理论到实践,从基础到高级,全面提升你在面对复杂SQL性能问题时的解决能力。通过学习这个教程,你将能够更好地优化你的数据库,提高系统的整体性能。

    oracle 数据库sql调优.doc

    Oracle数据库的SQL调优是一个复杂但至关重要的任务。通过对SQL查询的深入理解和合理优化,不仅可以大幅提升应用系统的性能,还能有效利用系统资源。遵循上述基本原则,结合具体的业务场景和技术需求进行细致调整,将...

    Oracle SQL自动调优生成报告和SQL语句的脚本

    在Oracle数据库中,SQL调优主要包括以下几个方面: 1. **SQL分析**:通过执行`EXPLAIN PLAN`或使用`DBMS_XPLAN`包来获取SQL执行计划,理解查询如何在数据库中执行,包括表的访问方式(全表扫描、索引扫描等)、连接...

    最实用的Oracle_SQL调优

    Oracle SQL调优是数据库性能优化的关键环节,尤其是在大型企业应用中,高效的SQL查询能够显著提升系统性能,降低I/O瓶颈的影响。以下是对标题和描述中所述知识点的详细说明: 1. **选择合适的Oracle优化器** ...

    Oracle_SQL调优课程教材

    SQL statement • Monitor the use of shared SQL areas • Write SQL statements to take advantage of shared SQL areas • Understand how to use the CURSOR_SHARING parameter • Use automatic PGA memory ...

    oracle sql调优培训大纲

    Oracle SQL调优是数据库管理员和开发人员提升数据库性能的关键技能之一。在Oracle数据库环境中,SQL调优涉及到优化查询语句,以减少资源消耗,提高数据处理速度,进而改善整体系统性能。以下是一份详细的Oracle SQL...

    oracle sql调优技术文档

    sql调优 oracle sql调优技术文档

    Oracle SQL 调优健康检查脚本

    Oracle SQL调优是数据库管理中的重要环节,它涉及到性能优化、资源利用率以及系统稳定性等多个方面。这个"Oracle SQL 调优健康检查脚本"(sqlhc.sql)显然是一个用于评估和诊断Oracle数据库SQL查询性能的实用工具。...

    高性能SQL调优

    Oracle数据库作为业界广泛使用的数据库管理系统,其SQL调优是提升系统性能的关键环节。"高性能SQL调优"这一主题涵盖了许多相关知识点,包括但不限于以下内容: 1. **SQL优化基础**:SQL查询是数据库操作的核心,...

Global site tag (gtag.js) - Google Analytics