虽然使用以下查询将Title列添加为索引:
ALTER TABLE Recipe ADD INDEX Title_idx (Title)
MySQL不会将此索引用于此查询:
SELECT * FROM Recipe
WHERE Title LIKE '%cake%';
我使用了EXPLAIN
关键字,关键字段为NULL
。
如何解决?我必须改进那个查询。
答案 0 :(得分:2)
因为索引从字符串的开头开始。由于您在标题中的任何位置查找子字符串,因此无法使用索引。
这可以使用索引
WHERE Title LIKE 'cake%';
但这不是
WHERE Title LIKE '%cake%';
答案 1 :(得分:2)
您需要全文索引才能部分匹配。考虑像电话簿这样的正常索引:用姓氏和名字来找人,比如说“史密斯,约翰”,但是找不到名字中带有“ith”的人是没用的,你必须经过输入手动匹配。
任何显示LIKE '%x%'
的查询都将自动成为表扫描。对于非平凡大小的表格,这不会缩放。