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