LIKE 是字串模式比對的基石。本文詳細說明 %(任意長度)、_(單一字元)兩大萬用字元用法,並對比兩者差異,最後給出索引利用與效能優化建議。
mysql> SELECT prod_name FROM products WHERE prod_name LIKE '_ ton anvil'; +-------------+ | prod_name | +-------------+ | 1 ton anvil | | 2 ton anvil | +-------------+
只匹配「任一字元 + ' ton anvil'」,故 .5 ton anvil(前綴為兩字元)不會被選中。
-- 尋找含 '100%' 的字串 mysql> SELECT * FROM t WHERE col LIKE '%100\%%' ESCAPE '\\'; -- 或自定義逃脫字元 mysql> SELECT * FROM t WHERE col LIKE '%100|%' ESCAPE '|';
utf8mb4_general_ci 不分大小寫,utf8mb4_bin 分大小寫WHERE col LIKE 'abc%' COLLATE utf8mb4_bin| 模式 | 能否用索引 | 說明 |
|---|---|---|
prefix% | ✅ 是 | 最左前綴匹配,可走 B-Tree 索引 |
%suffix | ❌ 否 | 前導萬用字元,全表掃描 |
%middle% | ❌ 否 | 兩端萬用字元,全表掃描 |
_prefix% | ❌ 否 | 前導單字元萬用字元同樣阻擋索引 |
%;若業務必須「任意位置搜尋」,考慮全文索引(FULLTEXT)或外部搜尋引擎= 或 IN,保留索引優勢INDEX idx_name (col(10)) 加速 col LIKE 'abc%'% 匹配任意長度、_ 匹配單字元。牢記「前導萬用字元殺索引」,業務允許時儘量改寫為前綴匹配或改用全文搜尋方案。