I/O 是回應時間最大成分,磁碟 I/O 比記憶體慢 10,000 倍。若交易透過主鍵/唯一索引做範圍掃描,將表資料按索引順序重組 (CTAS) 可劇烈減少物理讀取。
-- 原查詢:使用 last_name_index 範圍掃描取 100 筆
SELECT salary FROM employee WHERE last_name LIKE 'B%';
-- 未重組:100 行分散 100 個塊 → 100 次物理讀 + 索引讀
-- 重組後:100 行集中 2~3 個塊 → 1 次索引讀 + 2~3 次資料塊讀
-- 節省 97% 區塊讀取
SELECT index_name, clustering_factor, blevel
FROM dba_indexes WHERE table_name = 'EMPLOYEE';
SELECT blocks FROM dba_tables WHERE table_name = 'EMPLOYEE';
CLUSTERING_FACTOR ≈ BLOCKS:表順序與索引順序一致,**無需重組**。CLUSTERING_FACTOR ≈ ROWS:表順序與索引順序完全亂序,**重組效益極大**。| 工具 | 優點 | 缺點 | 適用版本 |
|---|---|---|---|
| CTAS (CREATE TABLE AS SELECT) | 語法簡單、並行可控、無需額外工具 | 需應用停機、索引/約束/權限須重建 | 所有版本 |
| DBMS_REDEFINITION (Online Redefinition) | **線上重組、零停機**、保留索引/約束/權限 | 步驟較複雜、需額外空間 | 9i+ |
| Oracle 9i 內建 Table Reorg Wizard | GUI 引導 | 本質仍用 CTAS/DBMS_REDEFINITION | 9i/10g |
CREATE TABLE employee_new PCTFREE 10 PCTUSED 40 PARALLEL 4 AS SELECT * FROM employee ORDER BY last_name;DROP TABLE employee; RENAME employee_new TO employee;DBMS_STATS.GATHER_TABLE_STATS。