为什么没有在带有通配符的LIKE查询中使用索引?

时间:2015-06-19 17:43:49

标签: mysql explain

虽然使用以下查询将Title列添加为索引:

ALTER TABLE Recipe ADD INDEX Title_idx (Title)

MySQL不会将此索引用于此查询:

SELECT * FROM Recipe
WHERE Title LIKE '%cake%';

我使用了EXPLAIN关键字,关键字段为NULL

如何解决?我必须改进那个查询。

2 个答案:

答案 0 :(得分:2)

因为索引从字符串的开头开始。由于您在标题中的任何位置查找子字符串,因此无法使用索引。

这可以使用索引

WHERE Title LIKE 'cake%';

但这不是

WHERE Title LIKE '%cake%';

答案 1 :(得分:2)

您需要全文索引才能部分匹配。考虑像电话簿这样的正常索引:用姓氏和名字来找人,比如说“史密斯,约翰”,但是找不到名字中带有“ith”的人是没用的,你必须经过输入手动匹配。

任何显示LIKE '%x%'的查询都将自动成为表扫描。对于非平凡大小的表格,这不会缩放。