T,資料量 1,100 萬筆TITLE 進行關鍵字「手冊」搜尋SET TIMING ON| 查詢方式 | SQL 片段 | 結果筆數 | 耗時 | 相對效能 |
|---|---|---|---|---|
| INSTR 正向 | WHERE INSTR(title, '手冊') > 0 |
65,881 | 11.04 秒 | 基準 (1x) |
| LIKE 模糊 | WHERE title LIKE '%手冊%' |
65,881 | 31.47 秒 | 2.85x 慢 |
| INSTR 反向 | WHERE INSTR(title, '手冊') = 0 |
11,554,580 | 11.31 秒 | 基準 (1x) |
| NOT LIKE | WHERE title NOT LIKE '%手冊%' |
11,554,580 | 未列出(預期更慢) | — |
INSTR(col, 'str') > 0 ≡ col LIKE '%str%'INSTR(col, 'str') = 0 ≡ col NOT LIKE '%str%'CREATE INDEX idx_title_ctx ON t(title) INDEXTYPE IS CTXSYS.CONTEXT;
-- 查詢
SELECT * FROM t WHERE CONTAINS(title, '手冊') > 0;
支援語詞、語幹、近鄰、模糊等豐富語義查詢,毫秒級回應。
CREATE INDEX idx_title_instr ON t(INSTR(title, '手冊'));
-- 查詢需完全匹配索引表達式
SELECT * FROM t WHERE INSTR(title, '手冊') > 0;
適用於固定關鍵字高頻查詢,避免全表掃描。
ALTER TABLE t ADD (has_manual AS (CASE WHEN INSTR(title, '手冊')>0 THEN 1 ELSE 0 END));
CREATE INDEX idx_has_manual ON t(has_manual);
LOWER/UPPER/TRIM/SUBSTR 等函數導致索引失效EXPLAIN PLAN 驗證執行計畫是否為 INDEX RANGE SCANANALYZE / DBMS_STATS 更新統計資訊,確保優化器決策準確1100 萬筆實測鐵證:INSTR 以 3 倍效能優勢碾壓 LIKE。字串搜尋優化,首選內建函數,次選函數索引,終局 Oracle Text。