Oracle中并没有区分表空间里放的是表还是索引
所有当数据量比较小时
完全可以把表和索引放在同一个表空间里
但随着数据量的增大
最好还是把表和索引分开存储在不同的表空间里
因为
)提高性能尽量把表和索引的表空间存储在不同在磁盘上把两类不同IO性质的数据分开放这样可以提高磁盘的IO总体性能
)便于管理试想一下如果索引的数据文件损坏只要创建索引即可不会引起数据丢失的问题
下面语句用于移动索引的表空间
复制代码 代码如下:
alter index INDEX_OWNER
INDEX_NAME rebuild tablespace NEW_TBS;
也可以利用以下语句获得某个schema下移动索引表空间的所有语句
复制代码 代码如下:
select
alter index
||owner||
||index_name||
rebuild tablespace NEW_TBS;
from dba_indexes
where table_owner=
SCHEMA_NAME
order by index_name;
有一点需要注意的是一旦把表和索引放在不同表空间后在创建新表时如果表有主键或唯一约束记得要指定到索引的表空间可以参考下面的例子
复制代码 代码如下:
create table tmp(
MON VARCHAR
(
)
IDNO VARCHAR
(
)
constraint pk_name primary key ( MON
IDNO )
using index tablespace index_tbs
CONSTRAINT uk_name UNIQUE (MON)
using index tablespace index_tbs
) ;