like 索引使用
大家Mysql索引有最左原则,所以通过 like '%XX%'查询的时候会造成索引失效,一般采用like 'XX%'右边匹配的方式来索引。但是这样一定会使用索引不
like 使用
创建SQL
CREATE TABLE `user` (
`ID_` bigint(20) NOT NULL AUTO_INCREMENT,
`AGE_` int(11) DEFAULT NULL,
`NAME_` varchar(255) DEFAULT NULL,
PRIMARY KEY (`ID_`),
UNIQUE KEY `NAME_` (`NAME_`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4
#插入三条数据
INSERT INTO `user` VALUES ('1', '1', '测试1.1'), ('2', '2', '测试2.2'), ('3', '3', '测试3');
案例1: like ‘%测试%’
EXPLAIN select * from user where NAME_ like '%测试';
EXPLAIN结果如下:type=ALL,key=null,说明全表扫描没有使用索引
案例2: like ‘测试%’
EXPLAIN select * from user where NAME_ like '测试%';
EXPLAIN结果如下:type=ALL,key=null,rows=3检索出所有数据,说明全表扫描没有使用索引
案例3: like ‘测试1%’
EXPLAIN select * from user where NAME_ like '测试1%';
EXPLAIN结果如下:type=range,key=NAME_,rows=1检索出一条数据,说明使用了索引
总结
从上面三个案例可以看出,like ‘xxxx%’ 时不一定100%使用索引,是否使用索引与该条件数量和数据总量比例有关