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 查詢時,仍然會全表掃描。設計

相關文章
相關標籤/搜索