MySQL 索引在 like 查询中的使用情况及覆盖索引优化 like 查询

通配符开头的模糊查询

like 查询以通配符开头时无法使用索引而使用全表扫描。

EXPLAIN SELECT * FROM staffs WHERE `name` like '%July%';
EXPLAIN SELECT * FROM staffs WHERE `name` like '%July';

1611477938909.png

通配符结尾的模糊查询

like 查询以通配符结尾可以使用索引,类型为范围(range)。

EXPLAIN SELECT * FROM staffs WHERE `name` like 'July%';

1611477946723.png

使用覆盖索引的模糊查询

使用覆盖索引可以解决 like 查询以通配符开头无法使用索引问题。

ALTER TABLE `tbl_user` ADD INDEX idx_user_nameAge(`name`, `age`);
EXPLAIN SELECT id FROM tbl_user WHERE `name` like '%July%';
EXPLAIN SELECT `name` FROM tbl_user WHERE `name` like '%July%';
EXPLAIN SELECT age FROM tbl_user WHERE `name` like '%July%';

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

1612184204877.png

超出覆盖索引范围的模糊查询

超出覆盖索引范围无法使用索引。

EXPLAIN SELECT * FROM tbl_user WHERE `name` like '%July%';
EXPLAIN SELECT id,`name`,age,email FROM tbl_user WHERE `name` like '%July%';

你可能感兴趣的:(mysql)