重建索引到指定表空间

数据存储时,最好是将数据与索引分开存储在不同的表空间中,因为建立索引是要占用硬盘存储空间的,索引表空间和数据表空间建立是一样的

下面语句用于移动索引到指定表空间:

alter index ha_wxzj.index_name rebuild tablespace ha_wxzj_index_data;

也可以利用以下语句获得某个schema下移动索引表空间的所有语句:
复制代码 代码如下:

select 'alter index '||owner||'.'||index_name||' rebuild tablespace ha_wxzj_index_data ;'
from dba_indexes
where table_owner='ha_wxzj'
order by index_name;

有一点需要注意的是,一旦把表和索引放在不同表空间后,在创建新表时,如果表有主键或唯一约束,记得要指定到索引的表空间

create table tmp(
mon varchar2(6) ,
idno varchar2(10) ,
constraint pk_name primary key (idno )
using index tablespace ha_wxzj_index_data,
constraint uk_name unique (mon)
using index tablespace index_tbs
) ;

--给表增加主键,并指定唯一索引的表空间
alter table tt
add constraint tt_id primary key (ID)
using index
TABLESPACE SKY_INDEX_DATA

select index_name,table_name,tablespace_name From user_indexes where tablespace_name='HA_WXZJ_DATA'

--游标方式 重建索引到指定表空间
declare cursor cursor_index
is select index_name from user_indexes where tablespace_name='HA_WXZJ_DATA'; --原索引表空间
begin
for indexname in cursor_index loop
execute immediate 'alter index '||indexname.index_name|| ' rebuild tablespace HA_WXZJ_INDEX_DATA'; --指定表空间
end loop;
end;

原文地址:https://www.cnblogs.com/tianmingt/p/4444889.html