首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL LIKE 子句中百分號 (%) 數量對查詢效能的影響實測

     編輯:MySQL 資料庫相關知識

常見迷思:LIKE '%keyword%' 中百分號越多查詢越慢?實測證明 百分號數量不影響執行效率,MySQL 優化器會在解析階段將多個連續萬用字元折疊為單一模式。

測試環境

  • 資料表 goods,約 10 萬筆,欄位 goods_name VARCHAR(200) 無索引。
  • MySQL 5.6,InnoDB,緩衝池足夠。

三組測試語句與耗時 (秒)

SQL耗時 (4次平均)
WHERE goods_name LIKE '%iPhone%iPod%'0.053
WHERE goods_name LIKE '%iPhone%' AND goods_name LIKE '%iPod%'0.053
WHERE goods_name LIKE '%%%%%%%%%iPhone%iPod%%%%%%%%%'0.045

結論

  1. 多個 % 被優化器視為單一「任意字元序列」,執行計畫完全一致 (type=ALL 全表掃描)。
  2. 寫法 2 (多條件 AND) 可讀性最好,且若欄位有全文索引可改用 MATCH...AGAINST 大幅提速。
  3. 前導萬用字元 (%keyword) 導致無法使用 B-Tree 索引,若需高效前綴搜尋請改用全文索引或反轉欄位索引。

最佳實踐建議

  • 單一欄位多關鍵字必須全部出現 → WHERE col LIKE '%kw1%' AND col LIKE '%kw2%'。
  • 若頻繁模糊查詢 → 建立 FULLTEXT INDEX (MySQL 5.6+ InnoDB 支援) 改用 MATCH(col) AGAINST('+kw1 +kw2' IN BOOLEAN MODE)。
  • 避免在大表對無索引欄位做 LIKE '%...%',必要時同步至 Elasticsearch/Meilisearch。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved