你必須先了解下 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`
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 查詢時,仍然會全表掃描。設計