mysql 中 like keyword% 一定会走索引吗?

阅读前提

你必须先了解下 mysql 中 explain 关键字的用法以及索引的相关知识。

先来看一张表

这是一张文章表,请忽略表的其他相关设计, 只需关注 title 字段,我们在 title 字段上建立索引。

`CREATE TABLE `bbs_posts` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `title` mediumtext COLLATE utf8mb4_bin NOT NULL COMMENT '标题',
  `content` mediumtext COLLATE utf8mb4_bin NOT NULL COMMENT '帖子内容',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `create_user` varchar(255) COLLATE utf8mb4_bin NOT NULL COMMENT '发帖人',
  `update_time` datetime DEFAULT NULL COMMENT '编辑时间',
  `update_user` datetime DEFAULT NULL COMMENT '编辑人',
  PRIMARY KEY (`id`),
  KEY `title_index` (`title`)
) ENGINE=InnoDB`

再来看三条 sql

1. select * from bbs_posts where title like %keyword%

2. select * from bbs_posts where title like %keyword

3. select * from bbs_posts where title like keyword%

我们了解到的一条结论是:上述的前两个 sql 执行时是不会走索引的,而第三条 sql 是会走索引查询的。

但是

我们这里忽略了一条不常见的可能性,那就是当我们的 title 字段里存储的数据区分度不高时,第三条 sql 的like关键字的用法同样不会走索引。 比如 :我们存储的都是 ‘湖人总冠军123’,‘湖人总冠军456’ 类似这样的值。而我们的 sql 是这样的: select * from bbs_posts where title like 湖人总冠军%;这个时候sql 查询时,仍然会全表扫描。

转载于:https://my.oschina.net/u/3984985/blog/3089309

你可能感兴趣的:(mysql 中 like keyword% 一定会走索引吗?)