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

MySQL INSTR 函數字串定位實戰:替代 LIKE 模糊查詢提升效能

     編輯:MySQL 綜合教學

語法與行為

INSTR(str, substr)  -- 返回 substr 在 str 中首次出現位置 (1-based),不存在返回 0
-- 等價於 LOCATE(substr, str) / POSITION(substr IN str)

基本範例

SELECT INSTR('www.example.com', '.');  -- 4
SELECT INSTR('foobarbar', 'bar');      -- 4
SELECT INSTR('foobar', 'xbar');        -- 0

替代 LIKE '%keyword%' 的高效寫法

-- 原本全表掃描
SELECT * FROM articles WHERE content LIKE '%mysql%';

-- 使用 INSTR 同樣全表掃描,但可讀性略優,效能相近
SELECT * FROM articles WHERE INSTR(content, 'mysql') > 0;
⚠ INSTR/LOCATE 同樣無法使用索引,本質仍是全表掃描。真正高效方案見下。

真正的高效替代方案

方案適用場景建立語法
全文索引自然語言長文搜尋ALTER TABLE t ADD FULLTEXT(content); SELECT * FROM t WHERE MATCH(content) AGAINST('mysql');
關鍵字/Tag 反向索引表精準關鍵字過濾應用層寫入時拆詞建立 keyword_article 映射表
Elasticsearch / MeiliSearch複雜搜尋、高亮、分面資料同步至搜尋引擎,MySQL 僅存主鍵

INSTR 進階用法:動態截取

-- 取第一個 '.' 之前的網域
SELECT SUBSTRING_INDEX('www.example.com', '.', 1);  -- www
-- 結合 INSTR 定位
SELECT SUBSTR(url, 1, INSTR(url, '/', 9) - 1) FROM logs;  -- 取協議後第一個 / 前內容

多字節與大小寫

  • 多字節安全(UTF-8/GBK 均正確)。
  • MySQL 4.0+ 僅在參數含二進位字串時區分大小寫,預設不區分(依校對規則 _ci)。
  • 強制區分大小寫:INSTR(BINARY str, BINARY substr) 或欄位校對 _bin。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved