前言
Oracle 是企業級應用的主流數據庫,設計開發階段是「主動優化」的黃金期,以最小成本換取最大性能增益。本文從邏輯結構、物理結構兩大維度,系統闡述優化策略。
一、Oracle 邏輯結構與物理結構速覽
- 邏輯結構: 表空間、表、索引、段、視圖、存儲過程、觸發器等對象,決定數據如何組織。
- 物理結構: 數據文件、日志文件、控制文件、參數文件,映射到作業系統層面。
二、邏輯結構優化:反規范化與索引/聚簇策略
1. 基本表擴展(反規范化)
第三范式雖保證一致性,但多表連接、全表掃描拖慢性能。三大反規范化手段:
- 分割表: 水平分割(按行)提高單表查詢速度,但應用邏輯變複雜;垂直分割(按列)將高頻列與低頻列分離,減少列寬,提升 I/O 效率,適合「同時查詢不同分割表列較少」場景。
- 保留冗余列: 避免頻繁連接,適用於冗余列數據變動較少的情況。
- 增加派生列: 預計算統計值,大幅縮短匯總運算時間。
原則: 頻繁讀少寫 → 物理反規范化;頻繁寫少讀 → 物理規范化。兩者結合才能互補。
2. 索引與聚簇
- 索引是提速利器,但非越多越好:高修改列建索引導致 B*Tree 重組、空間浪費;大表索引可能佔滿 SGA 緩存,反而拖慢全表掃描 → 大表建議分區 + 分區索引。
- 聚簇: 將共同鍵值的多表數據混存同一 Oracle 塊,一次 I/O 取多表數據,減少塊數、提升性能。
- 表與索引分表空間存放: 避免 I/O 競爭,物理層面再放不同磁盤。
三、物理結構優化:讓 I/O 並行、減少動態擴展
1. 磁盤讀寫並行
表與索引置於不同物理結構,Oracle 自動並行檢索索引與表數據。
2. 操作並行優化
統計表訪問頻率、連接頻率,按原則分配表空間/磁盤:
① 需連接的表分開;② 高頻表分開;③ 表結構與索引分開。
3. 減少存儲結構動態擴展
動態擴展導致在線系統反應緩慢。建議創建對象時預計算大小,合理設置 INITIAL、NEXT、MINEXTENTS,達到「不頻繁增長、不過度佔用」平衡點。
結語
設計階段對邏輯、物理結構統籌規劃,能從根本上提升整體性能,為後期調優奠定堅實基礎。