| 術語 | 定義 |
|---|---|
| Rowid | 偽列,唯一標識行物理位置(檔號、區塊、槽位),生命週期不變(含遷移列)。 |
| Recursive SQL | 執行使用者 SQL 時內部衍生的遞迴呼叫(如 DDl 修改字典、字典快取未命中),使用者無感知。 |
| Row Source | 操作產出的符合條件行集合:全表、篩選後子集、或連接後結果。 |
| Predicate | WHERE 條件限制。 |
| Driving Table (Outer) | 嵌套循環/雜湊連接的外層輸入,宜為套用條件後行數較少者(非絕對小表)。 |
| Probed Table (Inner) | 內層輸入,通常為大表且連接鍵有索引。 |
| Concatenated Index | 多欄組合索引,引導欄為首欄;條件必含引導欄才能使用索引。 |
| Selectivity | 唯一值數/總行數,越接近 1 越適合建索引、用索引。 |
db_file_multiblock_read_count) 降低 I/O 次數。| 類型 | 觸發條件 | 特徵 |
|---|---|---|
| Index Unique Scan | 唯一索引 + 等值條件 | 回傳單一 ROWID,最輕量。 |
| Index Range Scan | 唯一索引+範圍條件、組合索引前導欄不全、非唯一索引 | 回傳多 ROWID,資料已排序可省 ORDER BY。 |
| Index Full Scan | 需索引所有欄位、且查詢欄位全在索引中 | 掃描全部索引葉區塊,單區塊讀,資料有序。 |
| Index Fast Full Scan | 查詢欄位全在索引中、不需排序 | 多區塊讀、可並行、不保證順序,吞吐量最大。 |
覆蓋索引優勢:查詢欄位全在索引中可避免 TABLE ACCESS BY ROWID,省去隨機 I/O。
| 連接類型 | 核心流程 | 適用場景 | 優/缺點 |
|---|---|---|---|
| Sort Merge Join (SMJ) | 兩邊各自排序 → 合併 | 非等值連接、雙方已預排序(索引)、大表連接 | 排序耗資源;預排序時極快;可並行讀取/排序。 |
| Nested Loops (NL) | Outer 逐行 Probe Inner(通常走索引) | Outer 小且 Inner 有高選擇性索引、需快速回應首筆資料 | 可管道式輸出首筆行;Outer 選錯效能災難;並行查詢常用大表作 Outer。 |
| Hash Join (HJ) | Build Hash Table(Bitmap) from smaller → Probe larger | 等值連接、CBO、大表連接、Hash Table 能置於記憶體 | 理論最快;需 HASH_JOIN_ENABLED=TRUE 與足夠 hash_area_size;僅支援等值連接。 |
笛卡兒積:無連接條件導致,極少數情況(如星狀查詢維度表)刻意使用,否則為 Bug。
掌握存取路徑與連接機制的觸發條件、資料量門檻、索引覆蓋與排序特性,是讀懂執行計劃、進行 SQL 調優的基石。實戰中結合 EXPLAIN PLAN、DBMS_XPLAN 觀察實際 Row Source 統計資訊,才能精準診斷瓶頸。