Oracle中並沒有區分表空間裡放的是表還是索引,所有當數據量比較小時,完全可以把表和索引放在同一個表空間裡,但隨著數據量的增大,最好還是把表和索引分開存儲在不同的表空間裡
因為:
1)提高性能:盡量把表和索引的表空間存儲在不同在磁盤上,把兩類不同IO性質的數據分開放,這樣可以提高磁盤的IO總體性能;
2)便於管理:試想一下,如果索引的數據文件損壞,只要創建索引即可,不會引起數據丟失的問題。
下面語句用於移動索引的表空間:
復制代碼 代碼如下:
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 VARCHAR2(6) ,
IDNO VARCHAR2(10) ,
constraint pk_name primary key ( MON, IDNO )
using index tablespace index_tbs,
CONSTRAINT uk_name UNIQUE (MON)
using index tablespace index_tbs
) ;