解决like‘% str %’索引不被使用的方法

问题:解决like‘%字符串%’时索引不被使用的方法
解决方法:覆盖索引
新建表tbl_user

CREATE TABLE `tbl_user` (
  `id` int NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  `age` int DEFAULT NULL,
  `email` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

插入字段

INSERT INTO `test`.`tbl_user`(`id`, `name`, `age`, `email`) VALUES (1, '1aa1', 21, '[email protected]');
INSERT INTO `test`.`tbl_user`(`id`, `name`, `age`, `email`) VALUES (2, '2aa2', 222, '[email protected]');
INSERT INTO `test`.`tbl_user`(`id`, `name`, `age`, `email`) VALUES (3, '3aa3', 265, '[email protected]');
INSERT INTO `test`.`tbl_user`(`id`, `name`, `age`, `email`) VALUES (4, '4aa4', 21, '[email protected]');

 SELECT name,age FROM tbl_user WHERE name like '%aa%';

解决like‘% str %’索引不被使用的方法_第1张图片

SELECT name,age FROM tbl_user WHERE name like 'aa%';
SELECT name,age FROM tbl_user WHERE name like '%aa';

解决like‘% str %’索引不被使用的方法_第2张图片




 EXPLAIN SELECT name,age FROM tbl_user WHERE name like '%aa%';

在这里插入图片描述
#创建索引

CREATE INDEX idx_user_nameAge ON tbl_user(name,age);

创建索引之后再查一次

EXPLAIN SELECT name,age FROM tbl_user WHERE name like '%aa%';

在这里插入图片描述

EXPLAIN SELECT id FROM tbl_user WHERE name like '%aa%';

在这里插入图片描述

 EXPLAIN SELECT name FROM tbl_user WHERE name like '%aa%';

在这里插入图片描述

 EXPLAIN SELECT age FROM tbl_user WHERE name like '%aa%';

在这里插入图片描述

EXPLAIN SELECT name,age FROM tbl_user WHERE name like '%aa%';
	 EXPLAIN SELECT id,age FROM tbl_user WHERE name like '%aa%';
	  EXPLAIN SELECT id,name FROM tbl_user WHERE name like '%aa%';

在这里插入图片描述
索引都没有失效



EXPLAIN SELECT * FROM tbl_user WHERE name like '%aa%';

在这里插入图片描述
使用 * 时索引失效了

EXPLAIN SELECT name,age,email FROM tbl_user WHERE name like '%aa%';

在这里插入图片描述

你可能感兴趣的:(解决like‘% str %’索引不被使用的方法)