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

2019-06-17 19:54

第04章 数据库对象

TABLESPACE indx; 例5:建立函数索引

CREATE INDEX teacher_fname_index ON teacher(UPPER(name))

TABLESPACE indx;

4.2.4 修改索引

ALTER INDEX [user.]index

说明:可以修改索引的很多参数,一般用于改名、重建、合并等操作。 例1:改名

SQL>ALTER INDEX old_index RENAME TO new_index; 例2:重建,可同时修改表空间或其它参数 SQL>ALTER INDEX teacher_name_index REBUILD;

例3:合并,相邻叶节点都有剩余空间时,可将它们存放同一个叶节点,提高空间利用率。 SQL>ALTER INDEX teacher_name_index COALESCE;

4.2.5 删除索引

DROP INDEX [user.]indexname; SQL>DROP INDEX teacher_name_index; 当一个表删除时,其上的索引自动全部删除。

4.2.6 索引信息

索引常用的信息:索引名、拥有者、表空间、依附的表名、索引的字段等。 dba|user_indexes:索引名、索引类型。

dba|user_ind_columns:索引依附的表、索引字段。 dba|user_segments:索引段的信息。

- 26 -

第04章 数据库对象

4.3 簇

簇(cluster)是表存储的可选方式,是将几个表存储一起的容器,簇分为索引簇和散列簇。

4.3.1 索引簇

有这样的设计:部门表DEPT和员工表EMP,分别单独存放,各占单独的数据段。 DEPT部门表:

DEPTNO 10 20 DNAME SALES ADMIN EMP员工表:

EMPNO 101 102 103 104 105 EMPNAME 张三 李四 王五 赵六 孙七 DEPTNO 10 20 10 10 20 经常使用如下的连接查询(花名册):

SQL>SELECT dept.dname,emp.empno,emp.empname FROM emp

JOIN dept ON (dept.deptno=emp.deptno)

SQL>SELECT dept.dname,emp.empno,emp.empname FROM emp,dept

WHERE dept.deptno=emp.deptno

连接查询是分别读取2个数据表。能不能将被连接的几个表放在一起,一次读入呢? 概念:所谓索引簇,简单地说就是把几个表放在一起,按一定公共属性混合存放。通常是把经常逻辑上在一起连接查询(连接JOIN)的表聚簇存放,使其物理存储尽量邻接。索引簇是由共享相同数据块的一组表组成,具有相同公共列的值存储在一个数据块中,当连接查询时,多个表的数据按公共值一次读入,减少了I/O,提高了性能。其中公共列称为聚簇键或聚簇码。

如果将2个表存储在一个簇中的形式为:deptno=10及其员工存储一个数据块。

- 27 -

第04章 数据库对象 DEPTNO 10 DNAME SALES EMPNAME 李四 王五 赵六 20 ADMIN EMPNAME 李四 孙七 EMPNO 102 105 EMPNO 101 103 104 优点:

(1)当连接查询时,只需要读连接的数据块,减少了磁盘/IO.

(2)相同的聚簇键无论其在各个表中对应的行有多少,只存储一次,节省了存储空间。 使用聚簇的条件:

(1)聚簇中的多个聚簇表必须有公共的列,并且经常按公共列连接查询,而不是单独查询。 (2)静态表,表中的数据基本不变,表主要用于查询,而不是用来增删改操作; 索引簇的使用步骤: 第一步:创建索引簇 第二步:将表插入簇中 第三步:建立簇索引

在使用表之前,必须创建簇索引,所以称这种簇为索引簇(index cluster)。

4.3.2 创建索引簇

创建索引簇的要素: (1)簇的类型(INDEX) (2)索引簇的名字

(3)聚簇键及数据类型和宽度 (4)存储簇的数据块大小 (5)索引簇所在的表空间

- 28 -

第04章 数据库对象

创建索引簇的语法:

CREATE CLUSTER cluster_name(column datatype[,column datatype,…]) [SIZE n{K|M}]

[TABLESPACE tablespace] [INDEX]; 其中

cluster_name为索引簇的名称

(column datatype[,column datatype,…])聚簇键

[SIZE n{K|M}]一个聚簇键值数据的平均大小,缺省为数据块大小,即一个数据块存放一个键值数据。

[TABLESPACE tablespace]簇所在表空间,缺省为用户默认表空间 [INDEX]索引簇(默认)

SQL>CREATE CLUSTER dept_cluster(dno number(10))

SIZE 1M TABLESPACE users INDEX;

4.3.3 创建聚簇表

聚簇表的建立与普通表相似,只是用关键字CLUSTER指明其存放的索引簇代替表空间。指明其聚簇键,聚簇表中的聚簇键可以与索引簇中的聚簇键不同名,但结构相同。

CREATE TABLE [user.]tablename

({column1 datatype [DEFAULT expn] [column_constraint]|[table_constraint],...) CLUSTER cluster_name(column);

如:创建DEPT部门表并存放在dept_cluster索引簇中 SQL>CREATE TABLE dept(

dno

NUMBER(10),

dname VARCHAR2(20)

)CLUSTER dept_cluster(deptno);

创建EMP员工表并存放在dept_cluster索引簇中

- 29 -

第04章 数据库对象

SQL>CREATE TABLE emp(

empno NUMBER(10), ename VARCHAR2(20), dno

NUMBER(10)

)CLUSTER dept_cluster(dno);

4.3.4 建立簇索引

建立簇索引与建立表索引相似,表索引ON TABLE改为簇索引为ON CLUSTER,自动按定义索引簇声明的聚簇键建立索引,在建立索引时不必指明索引字段。指明索引的名称和表空间。

CREATE INDEX indexname ON CLUSTER [user.]cluster

[TABLESPACE tablespace] 如:

SQL>CREATE INDEX dept_cluster_index ON CLUSTER dept_cluster

TABLESPACE indx;

4.3.5 维护索引簇

修改索引簇

ALTER CULSTER clustername 常用于修改其物理存储参数。 修改聚簇表

ALTER TABLE tablename

注意不能修改其物理存储参数,受制于聚簇。 修改簇索引

ALTER INDEX indexname

修改簇索引同修改其它索引一样。 删除索引簇 删除空的索引簇

DROP CLUSTER cluster_name

- 30 -


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

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

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

马上注册会员

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