`
terry0501
  • 浏览: 306026 次
  • 性别: 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(电费实收)表经常按收费序号、户标识编号、抄表日期、电费发生年月、操作标志来具体查询某一笔收款的情况,如果将所有的字段都建在一个索引里那将会增加数据的修改、插入、删除时间,从实际上分析一笔收款如果按收费序号索引就已经将记录减少到只有几条,如果再按后面的几个字段索引查询将对性能不产生太大的影响。

分享到:
评论

相关推荐

    118个真实应用场景的Oracle存储过程案例及开发指南(从入门到熟练使用)

    3、资源分为两类:真实应用场景的存储过程案例61个(真实业务案例,供学习参考)、通用存储过程案例57个(涉及序列、表及列操作、主键唯一索引约束、事务、内存、权限、导出文件、视图、迭代、备份、参数校验等,可...

    Oracle使用强制索引的方法与注意事项

    在一些场景下,可能ORACLE不会自动走索引,这时候,如果对业务清晰,可以尝试使用强制索引,测试查询语句的性能。 以EMP表为例: 先在EMP表中建立唯一索引,如图。 普通搜索: SELECT * FROM EMP T 查看执行计划:...

    Oracle自带全文索引

     当需要在大量文章中通过关键字搜索文章时,Oracle自带的全文索引对于提高搜索性能非常有帮助,并且使用也很方便。  使用前的准备工作:  1、先查看oracle是否自带有ctxsys用户,如果没有该用户则不能使用全文...

    oracle与mysql差异分析

    本文详细描述了oracle数据库和mysql数据库两者在运用,操作,实施方面的不同,根据不同场景可以进行不同的优化策略,结合实际项目可以动态调整。

    Oracle建表语句demo(建表语句、索引、序列)

    提供了一个Oracle数据库建表语句的完整示例代码,用于演示如何在Oracle环境中创建一个... 通用性不足:虽然DEMO涵盖了常见的建表需求,但具体业务场景可能千差万别,需要使用者自行根据实际情况调整表结构和约束条件。

    Oracle Database12c数据库100个新特性与案例总结V2.0

    1.1.3 Pluggable database适应场景 7 1.1.4 Pluggable Database 带来的好处 8 1.1.5 通过DBCA创建12c可插拔数据库容器 10 1.2 在线迁移活跃的数据文件 11 1.3 表分区或子分区的在线迁移 12 1.4 不可见字段 12 1.5 ...

    mysql和oracle的区别小结(功能性能、选择、使用它们时的sql等对比)

    一、并发性 ...oracle使用行级锁,对资源锁定的粒度要小很多,只是锁定sql需要的资源,并且加锁是在数据库中的数据行上,不依赖与索引。所以oracle对并发性的支持要好很多。 二、一致性 oracle: oracle支持s

    【试读】Oracle编程艺术:深入理解数据库体系结构(第3版)

    包括文件、内存结构以及构成Oracle数据库和实例的底层进程,利用具体示例讨论了一些重要的数据库主题,同时分析了数据库中的物理结构,如表、索引和数据类型,并介绍采用哪些技术能最优地使用这些物理结构。...

    高并发Oracle数据库系统的架构与设计

    , 全书主要内容从三个维度展开:首先是内部扩展的维度,深入探讨了高效B树索引、高效表设计、查询优化器等数据库架构设计与优化的核心技术,以及高并发Oracle数据库系统架构与设计的方法论和常见的高并发案例;...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    有近20年使用Oracle技术产品以及Oracle数据库管理员/Oracle数据库应用管理员的经验,是真正应用集群、性能调优以及数据库内部属性方面的专家。同时是一位演讲家及Oracle ACE。  JARED STILL 从1994年就开始使用...

    Oracle及SQL语句优化指南

    很适合开发人员在编写SQL时注意,这里虽然说是Oracle的优化,其实,很多是标准SQL需要注意的写法。具有非常高的共通性。 1.选用适合的ORACLE优化器 2.HERE子句中的连接顺序 ...4.EXISTS与IN的使用场景 5.索引造成的大错

    Oracle数据库、SQL

    19.4为什么要使用索引 42 19.5哪些列适合建索引 42 19.6索引的类型 42 19.7哪些写法会导致索引用不了 43 二十、 数据库对象:序列号sequence 44 20.1什么是sequence 44 20.2创建sequence 44 20.3缺省是nocycle(不...

    Oracle数据库性能优化的艺术 (文平) 高清PDF扫描版

    《oracle数据库性能优化的艺术》内容高屋建瓴,用辩证法中的系统化分析方法,不仅从硬件(服务器系统、存储系统、网络系统等)、软件(操作系统、中间件系统、应用软件等)和应用场景(用户访问模式、用户使用频度、...

    2021 云和恩墨大讲堂PPT汇总(50份).zip

    MySQL备份恢复工具应用场景和使用方法 MySQL的性能 MySQL中的索引探究 Oracle 12cR2 ADG LGWR Library Cache案例分享 Oracle 10046 Trace 的取得和解析方法 Oracle 基于AWR ASH的性能分析 Oracle DataGuard备份恢复...

    收获不知Oracle

    6.2.5 各类连接限制场景对比 350 6.2.5.1 哈希连接的限制 350 6.2.5.2 排序合并的限制 353 6.2.5.3 嵌套循环无限制 355 6.3 你动手装备的表连接威震三军 355 6.3.1 嵌套循环与索引 356 6.3.2 哈希连接与索引 362 ...

    mysql重复索引与冗余索引实例分析

    冗余索引在一些特殊的场景下使用到了索引覆盖,所以比较快。 场景 比如文章与标签表 +——+——-+——+ | id | artid | tag | +——+——-+——+ | 1 | 1 | PHP | | 2 | 1 | Linux | | 3 | 2 | MySQl | | 4 | 2 | ...

    高并发Oracle数据库系统的架构与设计.pdf

    高并发Oracle数据库系统的架构与设计主要内容从三个维度展开:首先是内部扩展的维度,深入探讨了高效B树索引、高效表设计、查询优化器等数据库架构设计与优化的核心技术,以及高并发Oracle数据库系统架构与设计的...

    Oracle分区表(Partition Table)使用详解

    本课程详细介绍了Oracle数据库的分区表机制、分区表应用场景、分区表与分区索引类型/创建/维护操作、分区裁剪等,结合大量的案例程序,对Oracle分区表的使用进行了详细的分析讲解。

Global site tag (gtag.js) - Google Analytics