DB2 不支援 Oracle 風格的 /*+ HINT */,但提供 Optimization Guidelines(优化指导线) 機制,以 XML 片段嵌入 SQL 註解,指導優化器選擇連接順序、存取方式(掃描/索引)、連接方法(Hash/Merge/Nested Loop)。
SELECT d.DEPTNAME, e.FIRSTNME, e.LASTNAME
FROM DEPARTMENT D, EMPLOYEE E
WHERE d.DEPTNO = e.WORKDEPT
AND e.EMPNO LIKE '0001%'
/*
*/;
<msjoin>:指定 Merge Scan Join。<tbscan table="D">:強制 DEPARTMENT 表掃描(Table Scan)。db2set DB2_OPTPROFILE=YESdb2stop force && db2start 重啟實例生效。db2expln -d sample -f sql_file -g -t -z ";"
-- 未啟用指導線時:優化器選擇 Hash Join (HSJOIN),EMPLOYEE 走索引掃描
-- 啟用後:計畫變為 Merge Join (MSJOIN),雙表皆 Table Scan 後排序合併
| 元素 | 用途 |
|---|---|
<nljoin> | Nested Loop Join |
<msjoin> | Merge Scan Join |
<hsjoin> | Hash Join |
<tbscan table="T"> | 強制表掃描 |
<ixscan table="T" index="IDX"> | 強制索引掃描 |
<block>...</block> | 子查詢/視圖塊 |
db2exfmt 完整分析計畫再撰寫指導線。