FETCH FIRST N ROWS、移除不必要的 DISTINCT
-- DAILY_SALES.CUST_KEY 參考 CUSTOMER.CUST_KEY
-- 建立資訊約束後,以下查詢自動消除 CUSTOMER 表 JOIN
SELECT AMT_SOLD, SALE_PRICE, PROD_DESC
FROM DAILY_SALES, PRODUCT, CUSTOMER
WHERE DAILY_SALES.PROD_KEY = PRODUCT.PRODKEY
AND DAILY_SALES.CUST_KEY = CUSTOMER.CUST_KEY
前提:應用程式必須強制執行資訊約束,否則查詢結果可能不正確。
| 選項 | 適用場景 | 運作機制 |
|---|---|---|
REOPT(ALWAYS) | 複雜查詢負載、輸入變數值已知 | 延遲編譯至 OPEN/EXECUTE,變數值傳給編譯器計算精確選擇率 |
REOPT(ONCE) | 首個輸入變數具代表性、編譯開銷敏感 | 首次綁定時編譯,後續重用首次查詢片段 |
WHERE TRANS_DATE = CURRENT DATE - 30 DAYS
搭配 REOPT(ALWAYS) 可獲得最佳存取計劃。
REOPT(ALWAYS)REOPT(ONCE) 平衡編譯開銷與計劃品質