`
lxy2330
  • 浏览: 469443 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle优化----索引原理篇

 
阅读更多
1561人阅读 评论(0) 收藏 举报

Oracle提供了大量索引选项。知道在给定条件下使用哪个选项对于一个应用程序的性能来说非常重要。一个错误的选择可能会引发死锁,并导致数据库性能急剧下降或进程终止。而如果做出正确的选择,则可以合理使用资源,使那些已经运行了几个小时甚至几天的进程在几分钟得以完成,这样会使您立刻成为一位英雄。这篇文章就将简单的讨论每个索引选项。主要有以下内容:

[1] 基本的索引概念
    查询DBA_INDEXES视图可得到表中所有索引的列表,注意只能通过USER_INDEXES的方法来检索模式(schema)的索引。访问USER_IND_COLUMNS视图可得到一个给定表中被索引的特定列。

[2] 组合索引
    当某个索引包含有多个已索引的列时,称这个索引为组合(concatented)索引。在 Oracle9i引入跳跃式扫描的索引访问方法之前,查询只能在有限条件下使用该索引。比如:表emp有一个组合索引键,该索引包含了empno、 ename和deptno。在Oracle9i之前除非在where之句中对第一列(empno)指定一个值,否则就不能使用这个索引键进行一次范围扫描。
    特别注意:在Oracle9i之前,只有在使用到索引的前导索引时才可以使用组合索引!

[3] ORACLE ROWID
    通过每个行的ROWID,索引Oracle提供了访问单行数据的能力。ROWID其实就是直接指向单独行的线路图。如果想检查重复值或是其他对ROWID本身的引用,可以在任何表中使用和指定rowid列。   

[4] 限制索引
    限制索引是一些没有经验的开发人员经常犯的错误之一。在SQL中有很多陷阱会使一些索引无法使用。下面讨论一些常见的问题:
   
    4.1 使用不等于操作符(<>、!=)
        下面的查询即使在cust_rating列有一个索引,查询语句仍然执行一次全表扫描。
         select cust_Id,cust_name
         from   customers
         where  cust_rating <> 'aa';
         把上面的语句改成如下的查询语句,这样,在采用基于规则的优化器而不是基于代价的优化器(更智能)时,将会使用索引。
         select cust_Id,cust_name
         from   customers
         where  cust_rating < 'aa' or cust_rating > 'aa';
     特别注意:通过把不等于操作符改成OR条件,就可以使用索引,以避免全表扫描。
     
     4.2 使用IS NULL 或IS NOT NULL
         使用IS NULL 或IS NOT NULL同样会限制索引的使用。因为NULL值并没有被定义。在SQL语句中使用NULL会有很多的麻烦。因此建议开     发人员在建表时,把需要索引的列设成NOT NULL。如果被索引的列在某些行中存在NULL值,就不会使用这个索引(除非索引是一个位图索     引,关于位图索引在稍后在详细讨论)。

     4.3 使用函数
         如果不使用基于函数的索引,那么在SQL语句的WHERE子句中对存在索引的列使用函数时,会使优化器忽略掉这些索引。
         下面的查询不会使用索引(只要它不是基于函数的索引)
          select empno,ename,deptno
          from   emp
          where  trunc(hiredate)='01-MAY-81';
          把上面的语句改成下面的语句,这样就可以通过索引进行查找。
          select empno,ename,deptno
          from   emp
          where  hiredate<(to_date('01-MAY-81')+0.9999);

     4.4 比较不匹配的数据类型
         比较不匹配的数据类型也是比较难于发现的性能问题之一。
         注意下面查询的例子,account_number是一个VARCHAR2类型,在account_number字段上有索引。下面的语句将执行全表扫描。
         select bank_name,address,city,state,zip
         from   banks
         where  account_number = 990354;
         Oracle可以自动把where子句变成to_number(account_number)=990354,这样就限制了索引

分享到:
评论

相关推荐

    OracleSQL优化-中级篇.rar

    中级篇的Oracle SQL优化通常涉及更深入的技术和策略,包括但不限于查询优化、索引优化、表设计优化以及资源管理。以下是对这些知识点的详细说明: 1. 查询优化:查询优化是SQL优化的核心,它涉及如何最有效地执行...

    oracle学习-中文ppt

    这篇“Oracle学习-中文PPT”显然旨在帮助初学者和专业人士深入理解Oracle的相关概念和技术。 首先,Oracle数据库的核心概念包括:数据模型、SQL语言、数据库架构和管理。数据模型是数据库设计的基础,主要包括实体...

    Oracle优化器案例与原理分析(盖国强)

    本篇分析将基于盖国强先生的著作《Oracle优化器案例与原理分析》进行深入探讨。 首先,盖国强先生是业界资深的Oracle专家,作为国内第一个Oracle ACE及ACE总监,他拥有超过十年的Oracle从业经验,并且至今仍然活跃...

    Oracle数据库经典优化之索引原理篇

    Oracle数据库的经典优化中,索引原理是至关重要的一环。索引能够显著提升数据检索速度,但正确使用和理解各种索引选项才能发挥其最大效益。本文主要讨论了Oracle数据库中的一些关键索引概念和技术。 首先,基本的...

    Oracle优化全攻略一【Oracle 索引概念】.docx

    本篇文章将深入探讨Oracle中的索引类型及其优化策略。 首先,索引是提升数据库查询速度的关键工具。在Oracle数据库中,常见的索引类型包括B*Tree索引、反向索引、降序索引、位图索引、函数索引以及interMedia全文...

    0001-Oracle-系统-视图

    本篇将深入探讨"0001-Oracle-系统-视图"这个主题,通过分析`0001-Oracle-系统-视图.sql`文件,我们将了解如何利用系统视图来获取和理解Oracle数据库的内部工作原理。 首先,系统视图是Oracle数据库提供的一类预定义...

    09 oracle的索引 PPT

    总结,Oracle的索引是提升数据库性能的关键工具,理解索引的工作原理,合理设计和管理索引,能有效优化数据库的查询性能,但同时也要注意其带来的额外存储和维护成本。在实际应用中,需要根据业务需求和查询模式,...

    Oracle索引分析与比较

    总的来说,理解Oracle的各种索引类型及其工作原理对于优化数据库性能、提高查询效率至关重要。在实际应用中,数据库管理员需要根据业务需求和数据特性,合理设计和使用索引,以实现最佳的数据库性能。

    oracle 性能调整 sql性能优化大全

    多篇`ORACLE SQL语句优化技术分析-太平洋电脑网Pconline-[ORACLE].htm`文件可能包含如何重构SQL语句以减少全表扫描、避免笛卡尔积、使用适当的连接类型(如INNER JOIN、LEFT JOIN等)以及优化嵌套查询的技巧。...

    Oracle中hint的理解篇

    ### Oracle中Hint的理解与应用 #### 一、Hint概述 在Oracle数据库中,Hint是一种用于指导优化器如何生成执行计划的特殊语法。...总之,理解Hint的工作原理及其适用场景对于高效管理和优化Oracle数据库至关重要。

    oracle官方文档-Oracle Database Concepts

    8. **性能优化**:Oracle的性能优化涉及索引设计、查询优化、分区技术(Partitioning)、物质化视图(Materialized Views)和数据库调优顾问(Database Tuning Advisor)等工具。 9. **安全性**:Oracle数据库提供...

    oracle的索引学习

    本篇文章将深入探讨Oracle索引的学习,重点关注索引的原理、类型、优缺点以及如何使用和分析执行计划。 首先,理解索引的基本概念。索引是一种特殊的数据结构,它存储在表空间中,用于加速对表数据的访问。当执行...

    Oracle面试问题-技术篇

    ### Oracle面试问题解析 #### 1. 解释冷备份和热备份的不同点以及各自的优点 在Oracle数据库管理中,备份是非常...了解这些基本概念有助于更好地理解Oracle数据库内部的工作原理,并能更高效地管理和优化数据库性能。

    Oracle性能优化.doc

    ### Oracle性能优化知识点详解 #### 一、性能优化概述 **1.1 优化相关的问题** - **1.1.1 谁进行优化** - 数据库管理员(DBA)通常负责性能优化任务。 - **1.1.2 为什么要优化** - 提升系统响应速度; - 减少...

    oracle优化的基本原是和实用的SQL优化技巧

    本篇将深入探讨Oracle优化的基本原理和实用的SQL优化技巧。 首先,了解Oracle优化的基本原理至关重要。Oracle数据库采用了一个名为“查询优化器”(Query Optimizer)的组件,它在执行SQL语句前会分析多种可能的...

    ORACLE性能优化

    本篇将深入探讨SQL相关的优化策略,帮助你理解如何最大化利用Oracle数据库的性能。 首先,我们要了解Oracle数据库的工作原理。Oracle采用一种叫做“执行计划”的方式来执行SQL查询,它会分析查询语句并选择最优的...

    oracle 性能优化大全

    本篇Oracle性能优化大全将带领我们深入了解如何优化Oracle SQL/PL语句,以及如何提高数据库的整体性能。 首先,我们需要掌握SQL性能优化的基础知识。性能管理主要包含对系统响应时间和并发性的测量。性能问题通常由...

    Oracle数据库优化培训.pptx

    本篇文章主要介绍 Oracle 数据库优化的相关知识,涵盖了 SQL 语句执行过程、ORACLE 优化器、表之间的关联、如何得到 SQL 执行计划、如何分析执行计划等内容。 SQL 语句执行过程 SQL 语句处理的基本过程包括查询...

    oracle1

    标题“Oracle1”暗示了我们将讨论的是Oracle数据库的相关知识,而描述中提供的链接指向了一篇在ITEYE博客上的文章,虽然具体内容无法直接获取,但我们可以根据Oracle数据库的一般特性和常见问题来展开讨论。...

    微软数据库开发梦工场多媒体教学-oracle篇.rar_oracle

    【标题】"微软数据库开发梦工场多媒体教学-oracle篇.rar_oracle" 是一个专门针对初学者设计的Oracle数据库开发教程。这个压缩包包含了丰富的学习资源,旨在帮助新手快速掌握Oracle数据库的基础知识和开发技巧。 ...

Global site tag (gtag.js) - Google Analytics