首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 教學

Oracle 模糊查詢完整指南:LIKE、INSTR 與大數據量下的效能優化策略

     編輯:Oracle 教學

Oracle 模糊查詢:從基礎語法到百萬級資料的效能調優

模糊查詢是海量資料檢索的核心需求。本文系統整理 LIKE 通配符用法、INSTR 函數替代方案,並深入分析全表掃描瓶頸與索引優化路徑。

一、LIKE 通配符完整用法

通配符意義範例匹配結果
%零或多個字元LIKE '%三%'包含「三」:張三、小三、三腳貓、貓三腳
LIKE '三%'以「三」開頭:三腳貓
LIKE '%三'以「三」結尾:張三、小三
_單一任意字元(限制長度)LIKE '_三_'三字元且中間為「三」:貓三腳
LIKE '三__'三字元且首字為「三」:三腳貓
[...]字元集合中任一字元(類正則)LIKE '[張李王]三'張三、李三、王三
範圍簡寫LIKE '老[1-9]'老1~老9
[^...]排除字元集合LIKE '[^張李]三'非張/李開頭的「三」結尾
多關鍵字 AND 條件: 需同時包含「三」與「貓」時,用 LIKE '%三%' AND LIKE '%貓%';LIKE '%三%貓%' 只能匹配「三...貓」順序,會漏掉「貓...三」。

二、INSTR 函數:效能優於 LIKE 的替代方案

INSTR(欄位, '關鍵字') > 0   -- 等同 LIKE '%關鍵字%'
INSTR(欄位, '關鍵字') = 1   -- 等同 LIKE '關鍵字%'
INSTR(欄位, '關鍵字') = 0   -- 等同 NOT LIKE '%關鍵字%'

實測 INSTR 比 LIKE 效率高不少,但同屬逐行掃描,大數據量下仍受限於全表掃描。

三、特殊用法:INSTR 實現 IN-list 效果

SELECT id, name FROM user 
WHERE INSTR('101914,104703', id) > 0;
-- 等價於 id IN (101914, 104703),適合動態 ID 清單場景

四、為何關鍵字查詢效率低?

根因: Oracle 無法利用 B-Tree 索引進行 %關鍵字% 或 INSTR 搜尋,只能採用 全表順序掃描。複雜查詢或大表下,回應時間明顯下降。

五、根本解決之道:索引與全文檢索

  • 前綴查詢 (LIKE '關鍵字%') 可使用 B-Tree 索引範圍掃描。
  • Oracle Text:內建全文檢索引擎,建立 CTXSYS.CONTEXT 索引,支援語幹分析、模糊匹配、評分排序。
  • 功能性索引:CREATE INDEX idx_upper_name ON emp(UPPER(ename)) 配合 WHERE UPPER(ename) LIKE 'SMITH%'。
  • 應用層搜尋引擎:Elasticsearch、Solr 等外部引擎,將搜尋負載移出資料庫。
索引合理應用仍在研究中... 核心原則:避免前導萬用字元、善用功能性索引、大量全文搜尋上 Oracle Text 或專用引擎。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved