如同書本目錄加速查閱,Oracle 索引是資料表的「縮小版副本」,僅包含被索引欄位的值與對應的 ROWID。查詢時若走索引,可大幅減少需讀取的資料區塊數量,避免全表掃描 (Full Table Scan)。
假設表 SAMPLE_3 有 26 個欄位 (A-Z),每欄 30 字元,單區塊可讀 3,120 位元組。
| 場景 | 欄位長度 (CL) | 讀取欄位數 (CR) | 可讀列數 (RR=CL×CR×RR≤Buffer) | 說明 |
|---|---|---|---|---|
| 無索引查 C 欄 | 30 | 26 (全欄) | 4 | 被迫讀取所有欄位,I/O 浪費 |
| 建立 C 欄索引 | 30 | 1 (僅 C) | 104 | 單次 I/O 取回 26 倍資料量 |
索引如同「雙胞胎」:DML 異動主表同步維護索引,查詢優化器自動判斷是否使用。
CREATE UNIQUE INDEX ...。CREATE INDEX ...。CREATE INDEX idx_abc ON t(a,b,c)),符合「最左前綴」原則時可服務多種查詢模式。關聯式資料表本身無序 (插入至可用空間),但索引鍵值天然有序。對日期/數值欄建索引後,範圍查詢 (WHERE dt BETWEEN ...) 可直接走索引區間掃描,避免全表掃描。
WHERE、JOIN、ORDER BY 高頻欄位,優先建索引。ANALYZE INDEX ... VALIDATE STRUCTURE 或 DBMS_STATS 收集統計資訊,確保優化器決策正確。EXPLAIN PLAN / AUTOTRACE 驗證執行計畫確實走索引。善用索引是 Oracle 8i 提升查詢效能最直接、成本最低的手段。理解索引為「有序、精簡的資料副本」,並根據存取模式設計恰當的單欄/複合、唯一/非唯一索引,即可讓資料庫「快速找到目標資料」。