mysql like 后缀匹配真的不会用到索引吗

缘起

业余草大哥问(kao)了我一个问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
create table xttblog_like (
ID int primary key,
test_like VARCHAR(20) NOT NULL DEFAULT 0,
index test_like(test_like)
)engine=InnoDB;

insert into xttblog_like values(1,'公众号:业余草'),
(2,'微信号:xttblog'),
(3,'感谢转发!'),
(4,'MySQL like'),
(5,'MySQL in');

select * from xttblog_like;

EXPLAIN SELECT * FROM xttblog_like WHERE test_like LIKE 'y';
EXPLAIN SELECT * FROM xttblog_like WHERE test_like LIKE 'y%';
EXPLAIN SELECT * FROM xttblog_like WHERE test_like LIKE '%y';
EXPLAIN SELECT * FROM xttblog_like WHERE test_like LIKE '%y%';

%y 是用索引了吗?

起初不假思索,答曰: 不会,因为是后缀匹配. 但是上机实操之后, 傻了眼.

会用到index类型索引的!!!

但是稍后查了一下《高性能msql》 又放了心.

explain计划中的index类型的策略和全表扫描一样。只是扫描表的时候按照索引次序进行而不是行。主要优点就是避免了排序, 但是开销仍然非常大。一般保证查询至少达到range级别,最好能达到ref。