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

深度揭露Oracle索引使用限制:選擇性、資料分佈與維護成本

     編輯:Oracle 資料庫基礎

索引雖能加速查詢,但並非萬能良藥。錯誤的索引可能導致死鎖、效能暴跌、進程終止;正確的索引能讓原本跑數小時的作業在分鐘內完成。DBA必須認清其雙面性。

一、索引效能與資料選擇性直接掛鉤

Oracle提供兩種存取路徑:

  1. 全表掃描:讀取所有區塊,適合大量資料擷取
  2. 索引存取 (ROWID):透過索引定位少量行,適合高選擇性查詢

選擇性定義:符合條件的行數 / 總行數。選擇性越高(比例越低),索引效益越大。

  • 身分證字號查詢:近乎唯一,選擇性極高,索引極度有效
  • 出生年月查詢:大量重複,選擇性低,全表掃描可能更快

設計原則:優先為高基數(高唯一性)欄位建立索引,如PK、UK、高辨識度業務欄位。

二、索引效果受資料物理儲存位置影響

即使選擇性高,若符合條件的行分散在多個不連續區塊,索引需執行大量單區塊讀取,反而比多區塊讀取的全表掃描慢。

儲存情況存取方式效能
符合行集中在同幾個區塊索引範圍掃描 + 少量單區塊讀極快
符合行分散於大量區塊索引掃描 + 大量單區塊讀慢於全表掃描

DBA行動指南:

  1. 發現資料分散時,勿強行使用索引,讓優化器選擇全表掃描
  2. 規劃表空間時,同類業務表歸屬同一表空間,減少磁碟碎片
  3. 定期重組表/分區,讓熱點資料物理聚集
  4. 考慮索引叢集因子,USER_INDEXES.CLUSTERING_FACTOR接近區塊數=好,接近行數=差

三、索引的隱性成本

  • DML開銷:每次INSERT/UPDATE/DELETE需同步維護所有索引
  • 空間佔用:索引佔用額外儲存空間
  • 優化器誤判風險:統計資訊過舊可能導致錯誤執行計畫

黃金法則:「只有在查詢效能獲益明顯大於維護成本時,才建立索引」。定期審視USER_INDEXES與V$OBJECT_USAGE (監控索引使用情況),清除未被使用的索引。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved