什么是覆盖索引
MySQL
通过索引查数据时,索引的叶子节点上已经包含要查询的数据,这样MySQL
不需要再次查询表数据,这就是覆盖索引。换句话说,你要查询的列是索引,并且没有非索引的列的查询。
哪些存储引擎具有覆盖索引
MySQL
的InnoDB
引擎只有B-Tree
类型的索引具有覆盖索引,哈希索引、空间索引和全文索引都没有覆盖索引。
覆盖索引优化案例
-
优化模糊查询,例如查询的列是索引且无非索引列的查询,无论模糊查询是
%%、xxx%、%xxx
都可以用到索引,你可以用explain
看一下extra
列的结果select * from table_name a,(select id from table_name where name like '%p7%') b where a.id = b.id;
-
优化
limit
分页select * from table_name a,(select id from table_name where xxx order by id limit n , m) b where a.id = b.id;