为什么在带通配符的 LIKE 查询中不使用索引?
Why is an index not used on a LIKE query with wildcards?
尽管使用以下查询将标题列添加为索引:
ALTER TABLE Recipe ADD INDEX Title_idx (Title)
MySQL 没有为这个查询使用那个索引:
SELECT * FROM Recipe
WHERE Title LIKE '%cake%';
我使用了EXPLAIN
关键字,关键字段是NULL
。
如何解决?我必须改进该查询。
因为索引从字符串的开头开始。由于您在标题中的任何位置查找子字符串,因此无法使用索引。
这可以利用索引
WHERE Title LIKE 'cake%';
但这不是
WHERE Title LIKE '%cake%';
您需要全文索引才能部分匹配。考虑像 phone 书这样的普通索引:它非常适合按姓氏然后按名字查找人,比如 "Smith, John",但对于查找姓名中带有 "ith" 的人来说毫无用处,您将必须逐条手动匹配。
任何说 LIKE '%x%'
的查询都将自动成为 table 扫描。这不会针对非平凡大小的 tables.