当前位置: 首页> 财经> 股票 > Mysql LIKE什么时候走索引,什么时候不走索引

Mysql LIKE什么时候走索引,什么时候不走索引

时间:2025/8/23 20:40:27来源:https://blog.csdn.net/Gemini1995/article/details/140317726 浏览次数:0次

在 MySQL 中,LIKE 查询是否走索引,主要取决于通配符的位置和使用的存储引擎。

使用索引的情况

  1. 前缀匹配

    • LIKE 查询中的通配符出现在字符串的末尾时,查询可以利用索引。例如,LIKE 'abc%'
    • 这种情况下,索引可以快速定位以 abc 开头的所有记录,因为索引是按顺序存储的。
    SELECT * FROM table WHERE column LIKE 'abc%';
    
  2. 全匹配

    • LIKE 查询如果没有通配符,等同于 = 查询,也可以利用索引。
    SELECT * FROM table WHERE column LIKE 'abc';
    

不使用索引的情况

  1. 前缀通配符

    • LIKE 查询中的通配符出现在字符串的开头时,查询无法利用索引。例如,LIKE '%abc'LIKE '%abc%'
    • 这种情况下,MySQL 需要扫描整个表来找到匹配的记录,因为无法利用索引进行前缀查找。
    SELECT * FROM table WHERE column LIKE '%abc';
    SELECT * FROM table WHERE column LIKE '%abc%';
    
  2. 中间通配符

    • 当通配符出现在字符串的中间部分时,同样无法利用索引。例如,LIKE 'a%bc'
    SELECT * FROM table WHERE column LIKE 'a%bc';
    

特殊情况

  1. MySQL 5.6 及以后版本的 InnoDB 存储引擎

    • 对于较长的前缀匹配,即使索引的前缀较短,InnoDB 也可以使用索引。为了有效利用索引,可以使用前缀索引。
  2. 字符集和排序规则

    • 索引的使用还取决于列的字符集和排序规则。如果列的字符集和排序规则不一致,可能导致索引无法被正确利用。

示例

-- 能利用索引
CREATE INDEX idx_column ON table (column);
SELECT * FROM table WHERE column LIKE 'abc%';-- 不能利用索引
SELECT * FROM table WHERE column LIKE '%abc';
SELECT * FROM table WHERE column LIKE '%abc%';

优化建议

  1. 前缀索引

    • 对于较长字符串列,可以使用前缀索引。例如,CREATE INDEX idx_column ON table (column(10)); 这样在前 10 个字符上创建索引。
  2. 全文索引

    • 对于需要模糊查询的文本字段,可以考虑使用 MySQL 的全文索引 (FULLTEXT),这在 InnoDB 和 MyISAM 存储引擎中都可以使用。
    CREATE FULLTEXT INDEX idx_column ON table (column);
    SELECT * FROM table WHERE MATCH(column) AGAINST ('search_term');
    

了解这些规则和优化建议,可以帮助你在设计数据库和编写查询时更有效地利用索引,从而提高查询性能。

关键字:Mysql LIKE什么时候走索引,什么时候不走索引

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: