`
terry0501
  • 浏览: 313605 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

oracle 索引使用场景

 
阅读更多

Oracle  索引使用总结
前段时间公司在严查慢sql,总结一下索引的优缺点,使用场景,以及之前踩过的坑。
一、好处
1.提高查询速度
2.利用索引的唯一性来控制记录的唯一性
3.降低查询中分组和排序的时间
二、坏处
1.存储索引占用磁盘空间
2.执行数据修改操作(INSERT、UPDATE、DELETE)产生索引维护
索引是提高数据查询最有效的方法,也是最难全面掌握的技术,因为正确的索引可能使效率提高10000倍,而无效的索引可能是浪费了数据库空间,甚至大大降低查询性能。
3.存储索引的磁盘空间
4.执行数据修改操作(INSERT、UPDATE、DELETE)产生的索引维护
5.在数据处理时回需额外的回退空间。
三、索引按功能分类
1.唯一索引
  唯一索引有两个作用,一个是数据约束,一个是数据索引,其中数据约束主要用来保证数据的完整性,唯一索引产生的索引记录中每一条记录都对应一个唯一的ROWID。
2.主关键字索引
   主关键字索引产生的索引同唯一索引,只不过它是在数据库建立主关键字时系统自动建立的。
3.一般索引
  一般索引不产生数据约束作用,其功能主要是对字段建立索引表,以提高数据查询速度。
4.索引按索引对象分类
  单列索引(表单个字段的索引)
  多列索引(表多个字段的索引)
  函数索引(对字段进行函数运算的索引)
  建立函数索引的方法:
   create index 收费日期索引 on GC_DFSS(trunc(sk_rq))
   create index 完全客户编号索引 on yhzl(qc_bh||kh_bh)
  在对函数进行了索引后,如果当前会话要引用应设置当前会话的query_rewrite_enabled为TRUE。
   alter session set query_rewrite_enabled=true
  注:如果对用户函数进行索引的话,那用户函数应加上 deterministic参数,意思是函数在输入值固定的情况下返回值也固定。例:
   create or replace function trunc_add(input_date date)return date deterministi
   as
   begin
   return trunc(input_date+1);
   end trunc_add;
5.应用索引的扫描分类
  INDEX UNIQUE SCAN(按索引唯一值扫描)
   select * from zl_yhjbqk where hbs_bh='5420016000'
  INDEX RANGE SCAN(按索引值范围扫描)
   select * from zl_yhjbqk where hbs_bh>'5420016000'
   select * from zl_yhjbqk where qc_bh>'7001'
  INDEX FAST FULL SCAN(按索引值快速全部扫描)
   select hbs_bh from zl_yhjbqk order by hbs_bh
   select count(*) from zl_yhjbqk
   select qc_bh from zl_yhjbqk group by qc_bh
6.什么情况下应该建立索引
 (1)表的主关键字
      自动建立唯一索引
        如ctoc_order esc_orderid
(2)表的字段唯一约束
     ORACLE利用索引来保证数据的完整性
    如return_order的RORDER_ID       
(3)直接条件查询的字段
     在SQL中用于条件约束的字段
       如zl_yhjbqk(用户基本情况)中的qc_bh(区册编号)
       select * from zl_yhjbqk where qc_bh=’7001’
(4)查询中与其它表关联的字段
     字段常常建立了外键关系
       如zl_ydcf(用电成份)中的jldb_bh(计量点表编号)
       select * from zl_ydcf a,zl_yhdb b where a.jldb_bh=b.jldb_bh and b.jldb_bh=’540100214511’
(5)查询中排序的字段
     排序的字段如果通过索引去访问那将大大提高排序速度
       select * from zl_yhjbqk order by qc_bh(建立qc_bh索引)
       select * from zl_yhjbqk where qc_bh='7001' order by cb_sx(建立qc_bh+cb_sx索引,注:只是一个索引,其中包括qc_bh和cb_sx字段)
(6)查询中统计或分组统计的字段
       select max(hbs_bh) from zl_yhjbqk
       select qc_bh,count(*) from zl_yhjbqk group by qc_bh
7.什么情况下应不建或少建索引
(1)表记录太少
     如果一个表只有几十条记录,采用索引去访问记录的话,那首先需访问索引表,再通过索引表访问数据表,一般索引表与数据表不在同一个数据块,这种情况下ORACLE至少要往返读取数据块两次。而不用索引的情况下ORACLE会将所有的数据一次读出,处理速度显然会比用索引快。
     如表zl_sybm(使用部门)一般只有几条记录,除了主关键字外对任何一个字段建索引都不会产生性能优化,实际上如果对这个表进行了统计分析后ORACLE也不会用你建的索引,而是自动执行全表访问。如:
     select * from zl_sybm where sydw_bh='5401'(对sydw_bh建立索引不会产生性能优化)
(2)经常插入、删除、修改的表
     对一些经常处理的业务表应在查询允许的情况下尽量减少索引,如zl_yhbm,gc_dfss,gc_dfys,gc_fpdy等业务表。
(3)数据重复且分布平均的表字段
     假如一个表有10万行记录,有一个字段A只有T和F两种值,且每个值的分布概率大约为50%,那么对这种表A字段建索引一般不会提高数据库的查询速度。
(4)经常和主字段一块查询但主字段索引值比较多的表字段
     如gc_dfss(电费实收)表经常按收费序号、户标识编号、抄表日期、电费发生年月、操作标志来具体查询某一笔收款的情况,如果将所有的字段都建在一个索引里那将会增加数据的修改、插入、删除时间,从实际上分析一笔收款如果按收费序号索引就已经将记录减少到只有几条,如果再按后面的几个字段索引查询将对性能不产生太大的影响。

分享到:
评论

相关推荐

    oracle中索引的使用

    总的来说,Oracle中的索引使用是一门深奥的学问,涉及到索引的类型选择、创建、维护和优化等多个方面。只有深入理解并熟练掌握这些知识,才能在实际工作中发挥出索引的最大效能,为企业的数据库性能提供有力保障。

    ORACLE索引详解及SQL优化

    本文将深入探讨Oracle索引的原理、创建方法,并结合SQL优化策略,帮助你提升数据库查询速度,降低资源消耗。 首先,我们要理解索引的基本概念。在数据库中,索引类似于书籍的目录,它为数据提供快速访问的途径。...

    oracle索引,常见索引问题

    Oracle数据库中的索引是优化查询性能的关键工具,它允许快速定位和访问数据。常见的索引类型包括B*树索引和位图索引,每种都有其特定的应用场景和优势。 1. **B*树索引**:这是最常见的索引类型,类似于二叉树结构...

    Oracle索引分析与比较

    这种索引适用于大部分常规查询场景,尤其是当检索的数据量小于总数据量的10%时。B*Tree索引由分支块和叶块构成,叶块存储了索引列的值和对应的ROWID,而分支块则用于导航,包含索引范围和下一个索引块的地址。在查询...

    oracle索引类型及扫描方式大整理new

    ### Oracle索引类型详解 #### 一、B\*Tree索引:数据检索的基石 在Oracle数据库中,B\*Tree索引是最常见的索引结构,也是默认创建的索引类型。它基于二叉树原理,由分支块(branch block)和叶块(leaf block)构成,...

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

    总的来说,理解Oracle索引的工作原理并适当使用,是实现数据库高效运行的关键。正确选择和设计索引,避免使用限制索引的因素,能显著提高查询性能,减少数据库响应时间,从而提升整个系统的性能。在实践中,需要结合...

    oracle索引类型及扫描方式大整理

    本文主要介绍Oracle数据库中不同类型的索引及其内部结构,以及各种索引的工作原理和适用场景。 首先,Oracle使用平衡树(B-Tree)作为其索引的基础结构。B-Tree是一种自平衡的树形数据结构,它保证了在树的任意层级...

    Oracle 索引

    Oracle索引是数据库管理系统中用于加速数据检索的关键结构。它们的工作原理类似于书籍的目录,允许数据库系统快速定位和访问特定的数据行,而无需扫描整个表。Oracle提供了多种类型的索引,包括B树索引、位图索引、...

    oracle索引失效的总结

    ### Oracle索引失效的原因及解决方法 在Oracle数据库中,索引是提高查询效率的关键工具之一。然而,在实际的应用过程中,由于多种原因可能会导致索引失效,从而影响系统的性能。本文将详细介绍Oracle索引失效的一些...

    Oracle 创建索引的基本规则

    - **监控索引使用情况**: 使用Oracle的工具如AWR报告来监控索引的使用情况,识别未被充分利用的索引并进行调整。 - **避免频繁修改索引列**: 对索引列频繁进行UPDATE、INSERT或DELETE操作会导致索引碎片化,影响性能...

    Oracle索引分析与查询优化.pdf

    Oracle 索引可以分为单列索引、复合索引和函数索引等类型,每种类型都有其特点和应用场景。 Oracle 查询优化是指对 Oracle 查询语句的优化,以提高查询效率和降低查询时间。查询优化可以通过调整查询语句、使用索引...

    oracle 索引类型

    本篇将深入探讨Oracle中的主要索引类型,以及它们的应用场景和优缺点。 一、B-Tree索引 B-Tree(二叉树)索引是最常见的索引类型,适用于等值查询。当用户执行WHERE子句中含有等于、不等于、大于、小于或在某个范围...

    oracle的索引初步学习.doc

    #### 一、Oracle索引概览 索引在Oracle数据库中扮演着极其重要的角色,它是提高数据检索速度的关键技术之一。简单来说,索引类似于书籍中的目录,可以帮助快速定位数据的位置,从而显著提升查询效率。 #### 二、...

    oracle、sql数据库批量建索引

    Oracle和SQL Server作为两种广泛应用的关系型数据库管理系统,都支持创建和管理索引以优化查询速度。本文将深入探讨这两个数据库系统中如何批量创建和删除索引,以及它们对系统运行效率的影响。 首先,让我们了解...

    Oracle在线建立超大表的索引

    #### 表信息及使用场景 - **数据库名称**:***DB1** - **表名**:INFO_CUSTOMER - **表规模**:大约3100万条记录 - **表结构**:该表按照本地网进行分区 - **表使用情况**: - 客户开户(INSERT操作频繁) - 更改...

    oracle rac环境下索引热块的处理思路

    1. 无法使用索引的场景 索引并不总是有用的,有些情况下,索引可能会降低性能。例如,如果查询语句中的 WHERE 子句中包含多个列,而这些列都有索引,那么索引可能会被忽略。 2. 如何创建合适的索引 创建合适的...

    Oracle+SQL优化之使用索引提示一例

    ### Oracle SQL优化与索引提示应用案例解析 在Oracle数据库管理与优化的实践中,SQL语句的执行效率直接影响着系统的响应速度与资源消耗。当面对复杂的查询或批量更新操作时,合理利用索引提示(Index Hint)成为...

Global site tag (gtag.js) - Google Analytics