首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 主鍵索引聚集因子與表重組:CTAS 實戰減少 97% 物理 I/O

     編輯:Oracle 資料庫基礎

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:表順序與索引順序完全亂序,**重組效益極大**。

三、適用場景與限制

  • ✅ 適用:大表、索引範圍掃描、多行回傳、OLTP 熱點查詢。
  • ❌ 不適用:單行唯一主鍵點查、隨機存取模式。

四、重組工具對比

工具優點缺點適用版本
CTAS (CREATE TABLE AS SELECT)語法簡單、並行可控、無需額外工具需應用停機、索引/約束/權限須重建所有版本
DBMS_REDEFINITION (Online Redefinition)**線上重組、零停機**、保留索引/約束/權限步驟較複雜、需額外空間9i+
Oracle 9i 內建 Table Reorg WizardGUI 引導本質仍用 CTAS/DBMS_REDEFINITION9i/10g

五、CTAS 重組標準步驟

  1. CREATE TABLE employee_new PCTFREE 10 PCTUSED 40 PARALLEL 4 AS SELECT * FROM employee ORDER BY last_name;
  2. 驗證資料筆數、Checksum。
  3. 重建索引、約束、授權、Synonym。
  4. 維護窗口:DROP TABLE employee; RENAME employee_new TO employee;
  5. 收集統計資訊 DBMS_STATS.GATHER_TABLE_STATS。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved