解决like‘% str %’索引不被使用的方法
程序员文章站
2022-06-02 19:06:19
...
问题:解决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%';
推荐阅读
-
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
-
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
-
jQuery中animate()的使用方法及解决$(”body“).animate({“scrollTop”:top})不被Firefox支持的问题
-
php的str_replace() 函数使用正则解决方法
-
解决like‘% str %’索引不被使用的方法
-
php的str_replace() 函数使用正则解决方法
-
javascript使用for循环批量注册的事件不能正确获取索引值的解决方法_javascript技巧
-
javascript使用for循环批量注册的事件不能正确获取索引值的解决方法_javascript技巧