Chinaunix首页 | 论坛 | 博客
  • 博客访问: 160817
  • 博文数量: 52
  • 博客积分: 2295
  • 博客等级: 大尉
  • 技术积分: 540
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-22 17:42
文章分类

全部博文(52)

文章存档

2013年(1)

2012年(11)

2011年(1)

2010年(31)

2009年(8)

我的朋友

分类: Oracle

2012-12-05 13:18:06

索引概述
索引是一种与表或表簇相关联的可选结构,有时可以提高数据访问速度。通过在表中的一个或多个列上创建索引,在某些情况下使您能够(快速地)从随机分布的表行中检索一小部分行。索引是减少磁盘 I/O 的许多手段之一。
在创建索引后,数据库会自动维护并使用它们。数据库还会自动反映对相关表数据的更改,如添加、 更新、和删除行等,用户不需要对所有相关索引做任何操作。即使在插入行时,被索引数据的检索性能仍然几乎不变。但是,在表上存在过多的索引,会降低 DML 性能,因为数据库还必须更新索引。
索引具有以下属性:
·可用性
索引可能是可用的 (默认值) 或不可用的。不可用索引在 DML 操作中不会被维护,并会被优化程序忽略。不可用索引可以提高大容量加载的性能。你不用删除索引并稍后重新创建它,你可以使索引不可
用,最后再重新生成它。不可用索引或索引分区不会占用空间。当你把一个可用的索引置为不可用时,数据库将删除其索引段。
·可见性
索引可能是可见的 (默认值) 或不可见的。不可见索引在 DML 操作中会被维护,但在默认情况下优化程序不会使用它。使索引不可见是使其不可用或删除它的一种替代方法。不可见索引有时特别有用,比如在删除索引前测试移除后果,或临时用一下索引而不会影响整个应用程序。
 
键和列
键是一个列集或表达式,您可以在它上面创建索引。虽然这两个术语通常互换使用,但索引和键还是不同的。索引是存储在数据库中的一种结构,用户使用 SQL 语句来管理它们。而键严格来讲只是一个逻辑概念。
下面的语句在示例表 oe.orders 的列 customer_id 上创建索引:
CREATE INDEX ord_customer_ix ON orders (customer_id);
在前面的语句中, customer_id 列是索引键。索引本身被命名为ord_customer_ix。
注意:
主键和唯一键会自动生成索引,但您可能还需要在外键上创建索引。
 
复合索引
复合索引,也称为连接索引,是在某个表中的多个列上的索引。复合索引中的列应该以在检索数据的查询中最有意义的顺序出现,但在表中不必是相邻的。
若 WHERE 子句引用了复合索引中的所有列或前导列,复合索引可以加快SELECT 语句的数据检索速度。所以,在定义中所使用的列顺序很重要。一般地,最常被访问的列放在前面。
例如,假定应用程序经常查询雇员表中的 last_name、 job_id 和薪金列。同时假定 last_name 有很高的基数,也就是相对于表的总行数来说,不同值的数目很大。按以下的列顺序创建索引:
CREATE INDEX employees_ix ON employees (last_name, job_id, salary);
如果查询会访问所有的三个列,或仅 last_name 列,或仅 last_name 和job_id 列,则会使用此索引。在本例中,不访问 last_name 列的查询,将不会使用索引。
注意:
在某些情况下,例如,若前导列的基数很低,则数据库可能使用索引跳跃扫描
 
在同一个表上可以存在多个索引,只要其索引列具有不同的排列顺序。如果
您对多个列指定不同的排列顺序,您可以在这些相同的列上创建多个索引。
例如,下面的 SQL 语句指定的排列都是有效的:
CREATE INDEX employee_idx1 ON employees (last_name, job_id);
CREATE INDEX employee_idx2 ON employees (job_id, last_name);
 
唯一索引和非唯一索引
索引可以是唯一的或非唯一的。唯一索引保证在表的键列或键列集上没有具有重复的值的行。例如,没有任何两名雇员,可以有相同的雇员 id。因此,在一个唯一索引中,对每个数据值都存在一个 rowid。叶块中的数据仅根据键排序。
唯一索引允许在索引的列或列集中有重复的值。例如,雇员表的first_name 列中可能包含多个 Mike 值。对于非唯一索引,rowid 被包含在键中且已排序,因此非唯一索引按索引键和 rowid (升序) 进行排序。
除了位图索引或簇键列值为空的情况之外,Oracle 数据库不会索引所有键列都为空的表行。
 
索引类型
Oracle 数据库提供了几种索引模式,以提供增强性能的功能。索引可以分为以下几类:
·B-树索引
这是索引的标准类型。他们对于主键和高选择性索引非常适合。在复合索引中使用时,B-树索引可以按多个索引列以排序方式检索数据。B-树索引具有下列子类型:
o  索引组织表
索引组织表不同于堆组织表,因为数据本身就是索引。
 
阅读(1488) | 评论(0) | 转发(0) |
0

上一篇:表簇

下一篇:B-Tree索引与位图索引

给主人留下些什么吧!~~