隨著數據量增長,表與索引共置同一表空間導致 IO 爭用。本文說明分離收益、遷移命令、批量生成腳本、新建表時約束指定索引表空間完整方案。
| 收益 | 說明 |
|---|---|
| IO 隔離 | 表順序讀、索引隨機讀,分盤並行不干擾 |
| 故障域隔離 | 索引表空間損壞僅需 REBUILD,數據不丟失 |
| 備份策略分離 | 索引可 NOLOGGING/不備份,縮短備份窗口 |
| 維護彈性 | 獨立 REBUILD/COALESCE/移動,不影響表可用性 |
ALTER INDEX index_owner.index_name REBUILD TABLESPACE new_index_tbs;
SELECT 'ALTER INDEX ' || owner || '.' || index_name || ' REBUILD TABLESPACE index_tbs;'
FROM dba_indexes
WHERE table_owner = 'SCHEMA_NAME'
ORDER BY index_name;
輸出結果直接複製執行,或 SPOOL 到文件 @rebuild_indexes.sql。
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
);
關鍵語法:USING INDEX TABLESPACE <tablespace_name> 子句,適用於 PK/UK 約束創建時隱式建立的索引。
SELECT table_name, tablespace_name AS table_tbs
FROM dba_tables WHERE owner = 'SCHEMA_NAME';
SELECT index_name, tablespace_name AS index_tbs
FROM dba_indexes WHERE table_owner = 'SCHEMA_NAME';
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M 減少碎片GLOBAL INDEX 同理可指定表空間;LOCAL INDEX 隨分區走