Oracle Hints(提示)是開發人員與 DBA 干預優化器決策的關鍵工具。雖然成本基礎優化器(CBO)在多數情況下表現優異,但面對複雜查詢或統計資訊不足時,仍可能產生低效執行計畫。此時透過 Hints 指定存取路徑、連接順序或並行度,能顯著提升效能。
ALL_ROWS(吞吐量優先)、FIRST_ROWS(n)(回應時間優先)、CHOOSE、RULE。FULL(全表掃描)、INDEX(索引掃描)、ROWID。USE_NL(Nested Loops)、USE_HASH(Hash Join)、USE_MERGE(Sort Merge Join)。ORDERED、LEADING。PARALLEL、NOPARALLEL。Hints 必須放在 SQL 區塊的關鍵字(SELECT/UPDATE/DELETE/INSERT)之後,格式為:
SELECT /*+ hint [text] [hint[text]]... */ ...
-- 或
SELECT --+ hint [text] [hint[text]]...
+ 號緊接 /* 之後,中間不可有空格。RULE 外,使用任何 Hint 都會強制啟用 CBO;若無統計資訊,CBO 將使用預設值,建議定期執行 DBMS_STATS.GATHER_TABLE_STATS。-- 指定優化目標為前 10 筆快速回應
SELECT /*+ FIRST_ROWS(10) */ employee_id, last_name
FROM employees WHERE department_id = 20;
-- 強制使用規則基礎優化器
SELECT /*+ RULE */ * FROM employees WHERE employee_id = 7566;