第四章Oracle数据库对象(5)

2019-06-17 19:54

第04章 数据库对象

所以只有经常作为查询条件的字段才建立索引。

4.2.2 索引分类

索引的类型有:按索引建立的对象有表索引、簇索引(在簇中介绍); 按索引的结构有B树和位图索引。按索引内容有函数索引和反转索引。 1.B树索引

B树及改进的B+树和B*树,Oracle是采用的B*树,也是Oracle默认的索引类型。 B树索引结构示意如下:

B树索引的组成:

(1)根块:索引顶级块,包含下级节点(分支块)的入口信息,即索引字段值的分段和对应下级节点入口地址;

(2)分支块:中间节点块,包含下级节点(分支块或叶块)的入口信息,即索引字段值子分段和对应下级节点入口地址;

(3)叶块:末节点块,包含表行的入口信息,即索引列值和对应的rowid。 B树索引的查找:

B树的查询是二分查询,根据查询条件值,判断其所在左右子树,迅速查找其叶块,取得满足条件行的rowid。影响查询速度是B树的深度和宽度。

B树索引的特点:

(1)适用于大量异值列的大表,列的基数较高,即大部分值都不相同的字段; (2)可以维持平衡性(深度和宽度);当表的数据增长时,有一定的稳定性; (3)可以采用多列索引(组合索引、连接索引),可以升序(ASC)或降序(DESC);

- 21 -

A Q P Z A G F P A 1 P 2 G 3 P 4 Q 5 S 6 Q T S Z T 7 Z 8 第04章 数据库对象

(4)可以生成反转索引(REVERSE)和唯一索引(UNIQUE)。 B树索引的缺点:

(1)不适合列的基数较低的索引;少于200个记录没有必要建立B树索引。 (2)不支持函数查询。如SUBSTR()等函数条件查询。 2.位图索引

当列值基数小,都在一个较小的集合内,如性别只有’男’、’女’,婚否只有’yes’、’no’,不适合建立B树索引,可以使用位图(BITMAP)索引。

位图索引的结构:位图索引是一个二维数组,行对应表的记录行,列对应索引字段的取值位图和ROWID。如员工表staff中如下:其中是否退休retire(Y、N),性别sex(M[ale]、F[emale])

ROWID 1 2 3 4 STAFF_NO 202 203 302 302 SEX M F M F RETIRE Y Y N N 按SEX和RETIRE建立的位图索引结构示意如下:

ROWID 1 2 3 4 M 1 0 1 0 F Y N 0 1 0 1 1 0 0 0 1 1 0 1 位图索引的查找:

SQL>SELECT * FROM staff WHERE sex=’M’;

当查询男性M时,只需查询M=0的rowid。如果是多个位图字段的查询,如: SQL>SELECT * FROM staff WHERE sex=’M’ and retire=’Y’; 则需要对(M=1) and (Y=1)的逻辑运算。 位图索引的特点:

(1)占用空间较少,查询的速度快;如果几个列建立了位图索引,有专门的合并算法; (2)适合于基数少的列建立索引;

- 22 -

第04章 数据库对象

(3)适合于静态数据,如数据仓库的数据。 3.函数索引

如果建立索引的字段,在查询条件子句中使用了函数,则不会使用索引。如果经常使用字段的函数值作为查询条件,可以建立函数索引。函数索引的结构是B树索引。

函数索引的限制是:

(1)不能使用聚合函数,如SUM、AVG等;

(2)函数的返回值是可重复的,不能使用类似SYSDATE、USER等返回固定值的函数, 4.反转索引

索引字段值分布在一个比较密集的范围内,并且是顺序递增或递减,如果建立B树,则会使树的左右子树不均衡,导致树的层次急剧增加。可以使用反转索引。

反转索引是将索引字段值反向后建立的索引。反转索引结构还是B树结构,而位图索引不能使用反转索引。

4.2.3 建立索引

建立索引的要素有:

(1)索引所依附的表?小表不需要建立索引,除了定义主键自动建立的索引外。 (2)索引字段?只有经常用作查询条件的字段才需要建立索引。 (3)索引的名字?标识表和字段。 (4)建立什么类型的索引? (5)索引存放的表空间?

除了定义主键和唯一键时,自动建立索引外,可以手工建立索引,其语法如下: CREATE [UNIQUE|BITMAP] INDEX [schema.]indexname ON [user.]tablename

({column[ASC|DESC]|column_expression},...) [CLUSTER [user.]cluster] [TABLESPACE tablespace]

[PCTFREE n] [INITRANS n] [MAXTRANS n] [STORAGE storage]

- 23 -

第04章 数据库对象

[REVERSE] [NOSORT]

//翻转索引

//已经排序,无需重新排序 //日志不记录 //在线建立 //产生统计信息

[LOGGING|NOLOGGING] [ONLINE]

[COMPUTE STATISTICS] 说明:

(1)UNIQUE是唯一索引,是B树索引,要求索引字段的值唯一。一般不单独建立唯一索引,而是在定义字段的唯一性约束自动建立。

(2)BITMAP是位图索引,位图索引不能和UNIQUE同时选。默认的为B树索引。 (3)indexname是建立索引的名字 (4)tablename是索引依附的表名

(5)column是索引字段,索引字段可以是多个字段,称为组合索引。位图索引最多30列,B树索引最多32列。

(6)ASC按升序建立索引(默认),DESC按降序建立索引。 (7)column_expression是建立函数索引的表达式。 (8)cluster指明索引簇,关于簇索引,在”簇”一节中介绍。

(9)tablespace是索引存放的表空间,一般索引与表保存在不同的表空间。 (10)块控制参数中,不能指定PCTUSED参数。 (11)STORAGE指定存储参数。

(12)REVERSE建立反转索引,反转索引只能是B树索引,不能是位图索引。

(13)NOSORT数据行已经排好序,在建立索引时不必排序,可以节约索引建立时间,但不能和反转索引联用。

(14)LOGGING|NOLOGGING创建索引操作是否记录日志中。LOGGING是缺省方式。 (15)ONLINE在线索引,在建立索引时,允许进行对表进行DML操作。

(16)COMPUTE STATISTICS收集统计信息,以便优化程序选择执行计划。BITMAP、REVERSE、COMPUTE STATISTICS不能在线建立。

- 24 -

第04章 数据库对象

建立索引举例: 针对下表:

CREATE TABLE teacher(

id name sex age dno

NUMBER(20) VARCHAR2(10) CHAR(2) number(3), NUMBER(10), char(1)

CHECK(state IN (‘I’,’O’)),

NOT NULL, NOT NULL, DEFAULT ‘男’,

state

CONSTRAINT teacher_id_pk PRIMARY KEY(id) USING INDEX TABLESPACE indx )TABLESPACE USERS;

例1:建立B树索引:单列索引,指明表空间

CREATE INDEX teacher_name_index ON teacher(name)

TABLESPACE indx; 说明:

(1)索引名为:表名_字段名_index; (2)索引表空间一般与表所在表空间分离。 例2:建立B树索引的多索引字段组合索引

CREATE INDEX teacher_name_dept_index ON teacher(dept_id,name)

TABLESPACE indx; 例3:建立反转索引

CREATE INDEX teacher_age_index ON teacher(age)

TABLESPACE indx REVERSE; 例4:建立位图索引

CREATE BITMAP INDEX teacher_state_index ON teacher(state)

- 25 -


第四章Oracle数据库对象(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:污水处理283个为什么(绝对不错)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: