LIKE模糊查询易致索引失效,因前置通配符破坏B+树有序查找;仅LIKE 'abc%'等后缀匹配且满足最左前缀、类型一致、无函数包裹时才可能走索引;中文场景需统一字符集与校对规则,复杂需求应优先选用全文索引或专用搜索引擎。
SQL中LIKE模糊查询容易导致索引失效,根本原因在于匹配模式破坏了B+树索引的有序查找路径。只有当通配符不前置、且符合最左前缀原则时,索引才可能被有效利用。
当WHERE条件为LIKE '%abc'或LIKE '%abc%'时,数据库无法利用索引的有序性定位起始位置,只能逐行比对,索引完全失效。这是最常见的性能陷阱。
reverse(title),查LIKE 'cba%')只有LIKE 'abc%'这类后缀通配才可能命中索引,前提是:
(name, status),则name LIKE 'abc%'可用,但status LIKE 'x%'不可用)UPPER(name) LIKE 'ABC%'会跳过索引)中文字段常因排序规则(collation)和字符集(如utf8mb4_unicode_ci)影响索引
行为。即使写成name LIKE '张%',若字段定义为utf8mb4_bin而连接使用utf8mb4_general_ci,也可能触发隐式转换。
ALTER TABLE user ADD name_prefix VARCHAR(10) STORED AS (LEFT(name,10)); CREATE INDEX idx_name_prefix ON user(name_prefix);
LIKE '%张%',优先拆解为“首字+其他条件”组合过滤当模糊需求复杂时,应跳出LIKE思维,选用更适合的技术:
INDEX(name(10)))或覆盖索引优化