Innodb的辅助索引叶子节点包含的是主键列,所以主键一定是被索引覆盖的。
(1)例如,在sakila的inventory表中,有一个组合索引(store_id,film_id),对于只需要访问这两列的查 询,MySQL就可以使用索引,如下:
mysql> EXPLAIN SELECT store_id, film_id FROM sakila.inventoryG
(2)再比如说在文章系统里分页显示的时候,一般的查询是这样的:
SELECT id, title, content FROM article ORDER BY created DESC LIMIT 10000, 10;
通常这样的查询会把索引建在created字段(其中id是主键),不过当LIMIT偏移很大时,查询效率仍然很低,改变一下查询:
SELECT id, title, content FROM article
INNER JOIN (
SELECT id FROM article ORDER BY created DESC LIMIT 10000, 10
) AS page USING(id)
此时,建立复合索引”created, id”(只要建立created索引就可以吧,Innodb是会在辅助索引里面存储主键值的),就可以在子查询里利用上Covering Index,快速定位id,查询效率嗷嗷的
注:本文是参考《Mysql性能优化案例 - 覆盖索引》 的一篇文章借题发挥,参考了原文的知识点,自己做了一点的发挥和研究,原文被多次转载,不知作者何许人也,也不知出处在哪个,如需原文请自行搜索。
您可能感兴趣的文章:
MySQL性能全面优化方法参考,从CPU,文件系统选择到mysql.cnf参数优化MySQL性能优化的最佳20+条经验mysql性能优化工具--tuner-primer使用介绍数据库Mysql性能优化详解MySQL性能参数详解之Skip-External-Locking参数介绍MySQL性能参数详解之Max_connect_errors 使用介绍MySQL性能瓶颈排查定位实例详解Mysql性能优化方案分享Mysql性能优化案例 - 覆盖索引分享mysql性能优化之索引优化MySQL性能监控软件Nagios的安装及配置教程19个MySQL性能优化要点解析详解MySQL性能优化(二)详解MySQL性能优化(一)10个MySQL性能调优的方法浅谈InnoDB隔离模式的使用对MySQL性能造成的影响使用FriendFeed来提升MySQL性能的方法my.cnf(my.ini)重要参数优化配置说明