首页/数据/SQL 速查/LIKE 前置通配与替代方案
本包目录(311 条)
查询基础33 条连接与子查询40 条聚合与窗口函数54 条函数速查60 条变更与事务52 条
性能与执行计划72 条

LIKE 前置通配与替代方案

LIKE 'abc%' 可走索引,'%abc' 走不了:按业务选择全文检索、反转列或 trigram 索引等替代方案。

SQL 速查数据更新于 2026-10-12

示例

示例
-- 可走索引:前缀匹配
SELECT * FROM users WHERE name LIKE 'wang%';

-- 不可走索引:前置通配
SELECT * FROM users WHERE name LIKE '%wang%';

-- 替代一:MySQL 全文索引
ALTER TABLE articles ADD FULLTEXT INDEX ft_content (content);
SELECT * FROM articles WHERE MATCH(content) AGAINST('mysql' IN BOOLEAN MODE);

-- 替代二:PostgreSQL trigram 索引(需 pg_trgm)
CREATE EXTENSION IF NOT EXISTS pg_trgm;
CREATE INDEX idx_content_trgm ON articles USING GIN (content gin_trgm_ops);
SELECT * FROM articles WHERE content LIKE '%mysql%';
转义字面量中的百分号与下划线可用 ESCAPE 指定转义符
反转列固定后缀搜索可存反转后的字符串,再按前缀匹配
选择按匹配模式与数据规模在全文检索、trigram 与外部搜索引擎间取舍

易错点

  • 把 LIKE '%x%' 交给 B 树索引:前置通配无法定位,需要换检索方案或反转列
  • 忘记 ESCAPE:数据里有百分号或下划线时模式含义改变,前缀匹配也会用不上

数据来源与参考

  • MySQL 8.0 Reference Manual · Full-Text Search Functions
  • PostgreSQL Documentation · pg_trgm
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌