MySQL中LIKE模糊查询需正确使用%和_通配符,注意前导%导致索引失效,推荐左匹配'prefix%'以利用索引,慎用'%suffix',并防范SQL注入与NULL值陷阱。

MySQL 中的 LIKE 是最常用的模糊查询方式,核心在于正确使用通配符和注意性能陷阱。
LIKE 基础语法与通配符含义
LIKE 后跟一个模式字符串,支持两个关键通配符:
-
%:匹配任意长度的字符(包括零个字符),例如
'abc%'匹配以abc开头的所有字符串 -
_:匹配单个任意字符,例如
'a_c'匹配abc、a2c,但不匹配ac或abcd
注意:默认区分大小写取决于字段的排序规则(collation),如需忽略大小写,可使用 LOWER() 或确保列使用 utf8mb4_general_ci 类型排序规则。
常用模糊匹配场景写法
根据搜索需求选择合适模式:
- 查包含某子串:
WHERE name LIKE '%keyword%' - 查以某字符串开头:
WHERE name LIKE 'prefix%'(推荐,可能走索引) - 查以某字符串结尾:
WHERE name LIKE '%suffix'(无法使用普通索引,慎用) - 查固定长度+部分已知:
WHERE code LIKE 'A_202_'(匹配如A12024、A92021)
若需匹配字面意义的 % 或 _,用 ESCAPE 指定转义符,例如:LIKE '100\%' ESCAPE '\'。
提升 LIKE 查询性能的关键点
模糊查询容易拖慢数据库,尤其大数据量时:
- 前导通配符(如
'%abc'或'%abc%')会使 B+ 树索引失效,只能全表扫描 - 只有
'abc%'这类左匹配才可能利用索引(前提是字段有索引且未在函数中使用) - 考虑替代方案:对高频模糊检索字段,可建立red">全文索引(FULLTEXT)配合
MATCH ... AGAINST,更适合自然语言搜索 - 数据量极大时,引入 Elasticsearch 或 RedisSearch 等专用检索引擎更高效
避免常见错误
实际写 SQL 时常踩这些坑:
- 忘记加引号导致语法错误:
WHERE name LIKE abc%❌ 应为WHERE name LIKE 'abc%'✅ - 在
LIKE中误用变量拼接引发 SQL 注入(尤其 PHP/Java 拼接字符串时),务必使用预处理参数化查询 - 对 NULL 值使用
LIKE返回 FALSE,需单独判断:WHERE name IS NULL OR name LIKE '%x%' - 中文模糊搜索时,确认字符集是
utf8mb4,避免乱码或匹配失败










