重建索引到指定表空间
数据存储时,最好是将数据与索引分开存储在不同的表空间中,因为建立索引是要占用硬盘存储空间的,索引表空间和数据表空间建立是一样的
下面语句用于移动索引到指定表空间:
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;