oracle设置表的索引表空间

oracle中设置了索引后,索引本质也是存在一张表里的(索引表)。所以在为索引指定表空间时,不要将被索引的表和索引指向同一个表空间,这样可以避免产生IO冲突。使oracle能够并行访问存放在不同硬盘中的索引数据和表数据,提高查询速度。

准备工作:
我们有个用户hr2,数据表空间是users,临时表空间是temp,现在要指定索引表空间。

创建一个表空间文件:

create tablespace hr2_idx datafile '/u01/app/oracle/oradata/XE/hr2_idx.dbf' size 200m autoextend on next 32m maxsize 1024m extent management local;

hr2用户下有一个employees表:

select index_name, table_name, tablespace_name, uniqueness from user_indexes where table_name='EMPLOYEES';

INDEX_NAME		       TABLE_NAME		      TABLESPACE_NAME		     UNIQUENES
------------------------------ ------------------------------ ------------------------------ ---------
EMP_EMAIL_UK		       EMPLOYEES		      USERS			     UNIQUE
EMP_EMP_ID_PK		       EMPLOYEES		      USERS			     UNIQUE
EMP_DEPARTMENT_IX	       EMPLOYEES		      USERS			     NONUNIQUE
EMP_JOB_IX		       EMPLOYEES		      USERS			     NONUNIQUE
EMP_MANAGER_IX		       EMPLOYEES		      USERS			     NONUNIQUE
EMP_NAME_IX		       EMPLOYEES		      USERS			     NONUNIQUE



一、修改索引的表空间
格式如下

alter index INDEXNAME rebuild tablespace TABLESPACENAME;


alter index EMP_EMAIL_UK rebuild tablespace hr2_idx;
alter index EMP_EMP_ID_PK rebuild tablespace hr2_idx;
alter index EMP_DEPARTMENT_IX rebuild tablespace hr2_idx;
alter index EMP_JOB_IX rebuild tablespace hr2_idx;
alter index EMP_MANAGER_IX rebuild tablespace hr2_idx;
alter index EMP_NAME_IX rebuild tablespace hr2_idx;

再查询下hr2用户employees表的索引信息:

NDEX_NAME		       TABLE_NAME		      TABLESPACE_NAME		     UNIQUENES
------------------------------ ------------------------------ ------------------------------ ---------
EMP_EMAIL_UK		       EMPLOYEES		      HR2_IDX			     UNIQUE
EMP_EMP_ID_PK		       EMPLOYEES		      HR2_IDX			     UNIQUE
EMP_DEPARTMENT_IX	       EMPLOYEES		      HR2_IDX			     NONUNIQUE
EMP_JOB_IX		       EMPLOYEES		      HR2_IDX			     NONUNIQUE
EMP_MANAGER_IX		       EMPLOYEES		      HR2_IDX			     NONUNIQUE
EMP_NAME_IX		       EMPLOYEES		      HR2_IDX			     NONUNIQUE


索引字段所在的表空间已经更改。但是这样改起来太累了,所以最好在建立索引时就指定好索引表空间。

二、创建索引的时候指定索引表空间
实验:对employees表的HIRE_DATE字段建立索引。(索引也不是建的越多越好,索引表也要占用大量的表空间、磁盘空间)
格式如下

create index 索引名称 on 表(字段) tablespace 索引表空间;


create index EMP_HIRE_DATE_IDX on employees(hire_date) tablespace hr2_idx;

再查询下:

INDEX_NAME		       TABLE_NAME		      TABLESPACE_NAME		     UNIQUENES
------------------------------ ------------------------------ ------------------------------ ---------
EMP_EMAIL_UK		       EMPLOYEES		      HR2_IDX			     UNIQUE
EMP_EMP_ID_PK		       EMPLOYEES		      HR2_IDX			     UNIQUE
EMP_DEPARTMENT_IX	       EMPLOYEES		      HR2_IDX			     NONUNIQUE
EMP_JOB_IX		       EMPLOYEES		      HR2_IDX			     NONUNIQUE
EMP_MANAGER_IX		       EMPLOYEES		      HR2_IDX			     NONUNIQUE
EMP_NAME_IX		       EMPLOYEES		      HR2_IDX			     NONUNIQUE
EMP_HIRE_DATE_IDX	       EMPLOYEES		      HR2_IDX			     NONUNIQUE