萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL LIKE 模糊查詢完全指南:單一、多條件、CONCAT 組合與效能優化

LIKE 是 MySQL 模糊比對的核心操作符。本文整理單一條件、多條件組合、CONCAT 動態模式、通配符規則與索引優化關鍵點。

基本通配符

符號含義範例匹配
%任意長度字元(含 0 字元)'%三%' → 「張三」、「三腳貓」、「唐三藏」
_單一任意字元'_三_' → 「唐三藏」(三字、中間是三)

注意:中文字元在 utf8mb4 下佔 1 個字元,_ 可匹配單一中文字。

常用查詢模式

1. 單一條件

-- 包含 "abc"
SELECT * FROM `products` WHERE `name` LIKE '%abc%';

-- 以 "abc" 開頭
SELECT * FROM `products` WHERE `name` LIKE 'abc%';

-- 以 "abc" 結尾
SELECT * FROM `products` WHERE `name` LIKE '%abc';

2. 多條件 AND/OR

-- 同時包含 "三" 和 "貓"
SELECT * FROM `user` WHERE `name` LIKE '%三%' AND `name` LIKE '%貓%';

-- 包含 "三" 或 "貓"
SELECT * FROM `user` WHERE `name` LIKE '%三%' OR `name` LIKE '%貓%';

3. LIKE + IN 組合(MySQL 不直接支援,需用 CONCAT 技巧)

-- 需求:name 包含 'Robert' 或 'Bob' 或 'Smith'
SELECT * FROM `customers`
WHERE 'Robert Bob Smith III, PhD.' LIKE CONCAT('%', `name`, '%');
-- 反向思維:用常字串匹配欄位值

4. ESCAPE 處理特殊字元

-- 查詢實際包含 "%" 字元的資料
SELECT * FROM `t` WHERE `col` LIKE '%\%%' ESCAPE '\\';
-- 查詢實際包含 "_" 字元
SELECT * FROM `t` WHERE `col` LIKE '%\_%' ESCAPE '\\';

效能優化:前綴索引與全文檢索

  • LIKE 'abc%'(前綴固定)可使用 B-Tree 索引
  • LIKE '%abc%'(前導萬用字元)無法使用索引,全表掃描
  • 大量模糊查詢需求 → 改用 Fulltext Index(MATCH ... AGAINST)或外部搜尋引擎
  • 短字串前綴索引:ALTER TABLE t ADD INDEX idx_name_prefix (name(10));

常見錯誤

-- 錯誤:CONCAT 後有空格會導致語法錯誤
SELECT * FROM t WHERE col LIKE CONCAT('%', 'abc' , '%'); -- 正確
SELECT * FROM t WHERE col LIKE CONCAT ('%', 'abc' , '%'); -- 錯誤(函數名與括號間有空格)

總結

  1. 精確前綴查詢 → 利用索引,極快
  2. 2. 任意位置模糊 → 全表掃描,大表慎用 3. 複雜多模式 → 應用層組合或 Fulltext/搜尋引擎 4. 特殊字元 → 善用 ESCAPE

理解 LIKE 的運作機制,能在功能需求與查詢效能間取得平衡。

copyright © 萬盛學電腦網 all rights reserved