`
aiwori
  • 浏览: 9383 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
文章分类
社区版块
存档分类
最新评论

ORACLE 索引

 
阅读更多

相信大家都知道20/80规则,比如财富论中80%的人掌握世上20%的人的财富,20%的人掌握世上80%的人的财富,80%的人用脖子以下赚钱20%的人用脖子以上赚钱。在ORACLE性能优化方法论中也有这个规则:

(1)数据库体系结构设计和应用设计对系统性能的影响能占到80%,而硬件配置、参数调整、系统软件Bug等系统方面因素只占到20%。

(2)80%的性能问题是由20%的应用导致的。如少量大表的全表扫描导致性能瓶颈。

(3)80%的性能问题可以由20%的优化技术所解决,如简单的索引、执行路径优化等,能解决大部分性能问题。

那么本文就总结下ORACL优化方法论中20%的优化技术————索引。

索引技术由来已久,我们小学用的新华字典,图书馆里面找书,搜索引擎都用到了索引。据说Google存储了上百亿的网页,不知你是否想过为什么Google会在零点零几秒找到成千上万甚至上亿的搜索结果。如果是扫描所有文本,计算机扫描的速度再快也不可能做到这一点,这里面就用到了索引。

1.什么是索引。

记得小学时如果有一个汉字我们不知道他的读音,那么我们会通过字典中的笔划索引表很快找到这个字以及它对应的页码,然后翻到具体页码看这个汉字的详细信息,但是如果我们没有笔划索引表,那么我们只能一页一页翻字典直到在某页找到它。很显然前一种方式比后一种快。ORACLE中表一行一行的数据就相当于字典中所有的汉字,如何能快速的取出数据,ORACLE也用到了索引,在索引表中存储了每行数据的关键码以及数据的具体位置。

在ORACLE中每行数据都有一个ROWID,ROWID是一串文本,记录了本行数据在磁盘上的具体位置,如同字典中的页码记录了每个汉字的位置。索引表中就存储了ROWID,根据索引值找到rowid,然后再去磁盘取数据相对来说就快很多了。

2.ORACLE有哪些索引。

根据原理分类:B树索引(默认的索引)、位图索引;

应用的角度分类:

列值是否重复:惟一索引、非惟一索引(默认的索引);

定义的列的个数:单列索引和复合索引;

根据索引表达式的不同:函数索引

下面对常用的索引B树索引和复合索引作简单介绍。

3.B树索引

B树索引,有地方写成B-树,全称就是Balanced树,即平衡树。B树类似于平衡二叉树,不过支持多结点。B树索引可以是一个列的(简单)索引,也可以是组合/复合(多个列)的索引

在下图的例子中,B树索引位于某表的人名列上。这个索引的二元高度为3; Oracle会穿过两个树枝块(branch block),到达包含有ROWID的树叶块。在每个树枝块中,树枝行包含链中下一个块的ID号。树叶块包含了索引值、ROWID,以及指向前一个和后一个树叶块的指针。Oracle可以从两个方向遍历这个二叉树。B树索引保存了在索引列上有值的每个数据行的ROWID值。Oracle不会对索引列上包含NULL值的行进行索引。如果索引是多个列的组合索引,而其中列上包含NULL值,这一行就会处于包含NULL值的索引列中,且将被处理为空(视为NULL)。

B树特点:
适合大量的增、删、改(OLTP),因为只需要修改部分树结点,而不需要重新修改整个树结构;
不能用包含OR操作符的查询;
适合高基数的列(唯一值多)
典型的树状结构;
每个结点都是数据块;
大多都是物理上一层、两层或三层不定,逻辑上三层;
叶子块数据是排序的,从左向右递增;
在分支块和根块中放的是索引的范围;

针对B树单字段索引的设计建议有如下规范:

(1)分析SQL语句中的约束条件字段

(2)如果约束条件字段不固定,建议创建针对单字段的普遍B树索引

(3)选择可选择性最高(即字段值多)的字段建立索引。这里与位图索引正好相反。

(4)如果是多表连接SQL语句,注意被驱动表的连接字段是否需要创建索引

(5)通过多种SQL分析工具,分析执行计划并以量化形式评估效果。

4.复合索引

复合索引即在多列上建立索引。语法如:

CREATE INDEX ID_TEST ONTABLENAME(COLUMN1,COLUMN2,…);

这里COLUMN1,也就是复合索引的第一列,称为领导列。复合索引有两个重要的原则需把握:前缀性和可选择性。

(1)前缀性即如果查询条件中没有带上领导列,则通常情况下索引是不会起效的。

(2)可选择性:复合索引是按建立的字段顺序排序的,Oracle建议按字段可选择性高低进行排列,即字段值多的排在前面。因为字段值多,可选择性越强,定位的记录越少,查询效率就越高。

如果查询条件字段比较固定,则优先考虑创建针对多字段的复合索引。

5.索引也是双刃剑。

(1)索引表是为了针对数据表提高查询效率建立的,也需要占用物理空间

(2)对表中数据增加、删除和修改的时候,需要维护索引表,这样降低了原本的数据维护速度。

(3)如果查询出的结果大于整表数据的5%-10%以上时,使用索引可能比全表扫描性能更低。

分享到:
评论

相关推荐

    ORACLE索引详解及SQL优化

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

    Oracle索引分析与比较

    Oracle 索引是数据库管理系统中提升数据查询速度的关键组件,尤其在大型企业级应用中,选择合适的索引类型对于数据库性能至关重要。本篇文章将深入探讨Oracle中的B*Tree索引、反向索引、降序索引、位图索引和函数...

    Oracle索引机制分析

    总的来说,Oracle索引机制的深入理解对于数据库性能调优、查询优化和系统设计都具有重要意义。正确使用索引可以显著提高查询速度,降低响应时间,提升用户体验,但同时也需要平衡索引对写操作的影响,以确保系统的...

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

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

    oracle索引被限制的一些情况

    Oracle索引被限制的一些情况 Oracle索引是关系数据库管理系统中用于提高查询效率的一种机制,但是索引的使用也存在一些限制。本文将详细介绍一些常见的限制情况,帮助开发人员更好地使用索引,提高查询效率。 限制...

    Oracle索引优化相关

    ### Oracle索引优化相关知识点详解 #### 一、基本索引概念 在Oracle数据库中,索引是提高数据检索速度的重要工具。通过查询`DBA_INDEXES`视图,可以获取到当前数据库中所有表的所有索引信息。需要注意的是,如果...

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

    Oracle 索引是数据库管理系统中提升数据查询速度的关键技术。本文主要介绍Oracle数据库中不同类型的索引及其内部结构,以及各种索引的工作原理和适用场景。 首先,Oracle使用平衡树(B-Tree)作为其索引的基础结构...

    Oracle 索引

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

    Oracle 索引 使用方法

    Oracle 索引 使用方法,索引 使用原理, 索引 使用顺序过程

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

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

    oracle 索引的原理

    oracle 索引的原理原理深入理解!

    Oracle索引优化

    Oracle索引优化是数据库性能调优的关键环节,它关乎到数据检索速度和整体系统的效率。在Oracle数据库中,索引的种类繁多,包括B*Tree索引、反向索引、降序索引、位图索引和函数索引等。理解并正确使用这些索引类型...

    oracle索引与分区索引介绍

    Oracle 索引与分区索引介绍 Oracle 索引与分区索引是 Oracle 数据库中两个重要的概念,它们都是为了提高查询性能和数据存储效率而设计的。在本文中,我们将详细介绍 Oracle 索引与分区索引的概念、特点、分类、创建...

    oracle索引

    oracle的索引,非常适合初学者,介绍索引的分类,如何创建,修改等

    oracle索引,常见索引问题

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

    Oracle 索引练习语句程序

    ### Oracle索引的基本概念 #### 1. 创建索引 索引是数据库中一种用于提高数据检索速度的数据结构。通过创建索引,可以显著提升查询性能。例如,在`student`表上创建一个基于`sno`列的索引: ```sql CREATE INDEX ...

Global site tag (gtag.js) - Google Analytics