叢集技術核心價值
Oracle 提供 索引叢集 與 雜湊叢集 兩種表共存技術,將關聯緊密的表依共同鍵值物理共存同一資料區塊,減少連接查詢 I/O。但適用性有嚴格邊界,誤用將導致效能倒退。
一、索引叢集:適用與禁忌
✅ 建議使用場景
- 頻繁以相同鍵值連接的父子表 (1:* 關係),子表記錄與父表同區塊,連接查詢單次 I/O 獲取雙方資料。
- 頻繁查詢同一父鍵下的多筆子記錄,單獨叢集子表可提升子表查詢,不影響父表全掃描。
❌ 禁用場景
- 僅偶爾連接、或叢集鍵值頻繁修改 (修改需跨區塊移動記錄,開銷大於非叢集表)。
- 頻繁對叢集表執行全表掃描 (需讀取所有關聯表區塊,I/O 放大)。
- 單一鍵值對應資料超過 1-2 個 Oracle 區塊 (存取單筆記錄需讀多區塊,反而變慢)。
二、雜湊叢集:適用與禁忌
✅ 建議使用場景
- 高頻等值查詢 (
WHERE cluster_key = :val),以叢集鍵為雜湊鍵,單次 I/O 直接定位區塊。
- 可預估該鍵值當前與未來資料總空間,且空間穩定不溢出。
❌ 禁用場景
- 空間不足且無法為新記錄分配額外空間 (雜湊衝突導致鏈長增長,效能崩塌)。
- 表持續快速增長,定期重建大型雜湊叢集不切實際。
- 頻繁全表掃描且需為增長預留空間 (掃描需讀取所有預留區塊,含大量空白)。
- 叢集鍵值頻繁修改 (雜湊值改變需重新分佈)。
- 即使不與其他表連接,若上述條件符合,單表使用雜湊叢集仍有價值。
三、選型決策樹
- 是否高頻等值點查?→ 是 → 評估雜湊叢集 (空間可控、低修改)。
- 是否高頻父子連接?→ 是 → 評估索引叢集 (低修改、非全掃描)。
- 其他場景 → 標準堆組織表 + 索引 + 分區。
四、維護提醒
- 叢集建立後不可變更鍵定義,需重建才能調整。
- 定期監控
DBA_CLUSTERS、DBA_CLUSTER_HASH_EXPRESSIONS 空間使用率與鏈長度。
- 叢集表不支援
TRUNCATE、MOVE、某些分區操作,DDL 受限。