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

阅读前提

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

先来看一张表

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

`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 是会走索引查询的。post

可是

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

相关文章
相关标签/搜索