在 MySQL 中,如果你使用 like '%%'
这样的查询,通常情况下不会使用索引,因为这个查询会匹配表中的所有行,这意味着 MySQL 无法利用索引来快速定位到符合条件的行。
当使用 like
操作符时,如果在模式串前面使用了通配符 %
,MySQL 将无法使用索引来加速查询,因为在这种情况下,MySQL 必须扫描整个索引才能确定哪些行匹配查询条件。
如果你的查询中包含前缀匹配,例如 like 'foo%'
,则 MySQL 可以使用索引来定位到以 "foo" 开头的行。同样地,如果你的查询中包含后缀匹配,例如 like '%foo'
,MySQL 可以使用索引来定位到以 "foo" 结尾的行。
总之,当你编写 like
查询时,请尽量避免在模式串前面使用通配符 %
,以提高查询性能并允许 MySQL 使用索引来加速查询。
那么如果你有业务需要用到like '%foo%' 如何做到高效查询?
MySQL 提供了全文搜索引擎功能,可以通过使用 MATCH AGAINST
语法进行全文搜索。全文搜索引擎可以为文本数据建立索引,使得模糊搜索更加高效。
SELECT * FROM mytable WHERE MATCH (mycolumn) AGAINST ('foo' IN BOOLEAN MODE);
这个查询将返回 mycolumn
列中包含单词 "foo" 的所有行。通过使用全文搜索引擎,MySQL 可以利用索引来快速定位匹配的行,从而提高查询性能。
需要注意的是,全文搜索引擎对于一些短词或者常用词可能不会进行索引,因此需要在使用前仔细查看 MySQL 的文档并进行配置。此外,全文搜索引擎的配置和性能优化也是一个复杂的课题,需要根据实际情况进行调整和优化。