当前位置:文档之家› 第5章 索引与数据完整性[60页]

第5章 索引与数据完整性[60页]


01 索引的分类
索引的分类
(1)索引按存储方法分类,可以分为两类:B*树索引和位图索引。 B*树索引的存储结构类似图书的索引结构,有分支和叶两种类型的存储数据块,分支块相当于图书的大 目录,叶块相当于索引到的具体的书页。Oracle用B*树(B*-tree)机制存储索引条目,以保证用最短路 径访问键值。默认情况下大多使用B*树索引,该索引就是通常所说的唯一索引、逆序索引等。 位图索引主要用来节省空间,减少Oracle对数据块的访问。它采用位图偏移方式来与表的行ID号对应。 采用位图索引一般是在重复值太多的表字段情况下。位图索引在实际密集型OLTP(数据事务处理)中 用得比较少,因为OLTP会对表进行大量的删除、修改和新建操作,Oracle每次进行操作都会对要操作 的数据块加锁,所以多人操作时很容易产生数据块锁、等待、甚至死锁现象。在OLAP(数据分析处理) 中应用位图索引有优势,因为OLAP中大部分是对数据库的查询操作,而且一般采用数据仓库技术,所 以大量数据采用位图索引时节省空间比较明显。当创建表的命令中包含有唯一性关键字时,不能创建位 图索引。创建全局分区索引时也不能选用位图索引。
索引的分类
(2)索引按功能和索引对象可分为以下六种类型。
唯一索引。唯一索引意味着不会有两行记录相同的索引键值。唯一索引表中的记录没有RowID,所以不能再对 ① 其建立其他索引。在Oracle 11g中,要建立唯一索引,必须在表中设置主关键字,建立了唯一索引的表只按照
该唯一索引结构排序。
② 非唯一索引。不对索引列的值进行唯一性限制的称为非唯一索引。
必须在要索引的表上具有INDEX权限。
必须具有CREATE ANY INDEX权限。
语法格式为:
CREATE [UNIQUE∣BITMAP] INDEX
/*索引类型*/
[<用户方案名>.]<索引名>
ON <表名>(<列名> | <列名表达式> [ASC∣DESC] [,…n])
[LOGGING | NOLOGGING]
③ 分区索引。所谓分区索引是指索引可以分散地存在于多个不同的表空间中,其优点是可以提高数据查询的效率。
④ 未排序索引。未排序索引也称为正向索引。由于Oracle 11g数据库中的行是按升序排序的,因此创建索引时不 必指定对其排序而使用默认的顺序。
⑤ 逆序索引。逆序索引也称为反向索引。该索引同样保持索引列按顺序排列,但是颠倒已索引的每列的字节。
创建索引
(3)所有选项设置完后单击“确定”按钮完成索引的创建,索引创建完后单击XSB表,在“索引”选项页可以看到 新创建的索引XSB_NAME_INDEX,如图5.3所示。
创建索引
2.以命令方式创建索引
使用SQL命令可以灵活方便地创建索引。在使用SQL命令创建索引时,必须满足下列条件之一。
索引的表或簇必须在自己的模式中。
(1)
合理安排索引列。在CREATE INDEX 语句中,列的排序会影响查询的性能,
通常将最常用的列放在前面。创建一 (3)
个索引来提高多列查询时,应该清楚 地了解这个多列索引对什么列的存取 有效、对什么列的存取无效。
索引正确的表和列。如果经常检
索的内容仅为包含大量数据的表
(2) 中少于15%的行,就需要创建索引。
第5章 索引与数据完整性
索引
索引
在Oracle 11g中,索引是一种供服务器在表中快速查找一行的数据库结构。在数据库中建立索引主要有以下作 用:
(1)快速存取数据;
(3)实现表与表之间的参 照完整性;
(2)既可以改善数据库性 能,又可以保证列值的唯 一性;
(4)在使用ORDER BY、 GROUP BY子句进行数据检索 时,利用索引可以减少排序 和分组的时间。

பைடு நூலகம்
基于函数的索引。基于函数的索引是指索引中的一列或者多列是一个函数或者表达式,索引根据函数或者表 达式计算索引列的值。可以将基于函数的索引创建成为位图索引。
02 使用索引的原则
使用索引的原则
在表中插入数据后创建索引。在表中插入数 据后,创建索引效率将更高。因为如果在装 载数据之前创建索引,那么插入每行时 Oracle都必须更改索引。
(4)
根据索引大小设置存储参数。创建
索引之前应先估计索引的大小,以 便更好地规划和管理磁盘空间。单
(6)
个索引项的最大值大约是数据块大
小的一半。
指定索引数据块空间。创建索引时,索
(5)
引的数据块是用表中现存的值填充的, 直到达到PCTREE为止。因此,如果打算
将许多行插入到被索引的表中,PCTREE
为了改善多个表的相互关系,常
常使用索引列进行关系连接。
使用索引的原则
例如,当在A、B、C三列上创建索引时,实际得到的顺序如下: A AB ABC 所以,可以获得A列的索引、A和B列结合的索引以及A、B、C三列结合的索引。不能得到的顺序如下: B BC C
使用索引的原则
限制表中索引的数量。尽管表可以有任意数 量的索引,但是索引越多,在修改表中的数 据时对索引做出相应更改的工作量也越大, 效率也就越低。因此,应及时删除目前不用 的索引。
创建索引
说明:
(1)
UNIQUE:指定索引所 基于的列(或多列)值 必须唯一。默认的索引 是非唯一索引。Oracle 建议不要在表上显式定 义UNIQUE索引。
/*指定是否创建相应的日志记录*/
[COMPUTE STATISTICS]
/*生成统计信息*/
[COMPAESS | NOCOMPRESS]
/*对复合索引进行压缩*/
[TABLESPACE <表空间名>]
/*索引所属表空间*/
[SORT | NOSORT]
/*指定是否对表进行排序*/
[REVERSE]
就应设置得大一点。不能给索引指定
PCTUSED。
03 创建索引
1.以界面方式创建索引 2.以命令方式创建索引
创建索引
1.以界面方式创建索引
以在XSB表的“姓名”列创建索引为例,使用SQL Developer创建索引的操作过程如下。 (1)启动SQL Developer,展开连接myorcl,右击要创建索引的XSB表,选择“索引”菜单下的“创建索引”子菜 单项,如图5.1所示。 (2)在弹出的“创建索引”窗口中创建索引,如图5.2所示。
相关主题