问题:解决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%';
SELECT name,age FROM tbl_user WHERE name like 'aa%';
SELECT name,age FROM tbl_user WHERE name like '%aa';
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%';