接下来几篇帖子我们使用mysql的一个电影DVD租赁公司的管理后台数据库sakila-db教学

这个数据库的下载位置是mysql的官网的文档中

##1.索引覆盖

索引覆盖查询表的速度会很快,主要因为1是用到了索引2是因为没有回表,先看举一个例子:

#####第一个例子

第一行执行语句是show index from inverntory,也就是展示一个表的索引信息,第二个是展示另一个表的索引信息;

这两个表除了索引其他都一样。 可以看到第一个表用到了三个索引,一个是主键索引,然后是一个film_id的索引,还有个联合索引(storeid,filmid);

然后我们下面最后一个查询语句可以好好看下,虽然查询仅用到了storeid,但是上几篇帖子讲过联合索引中使用第一个查询是可以走索引的,然后这条语句的查询字段又刚好是联合索引中包含的两个,那么我们可以想想一般辅助索引是要拿着id回表去查询具体的数据信息,但是我们这个联合索引刚好包含我们需要的两个字段,当然就不需要回表咯。

而上述的这种情况就叫做索引覆盖。

#####第二个例子

同样的我们再分析一个语句,分析结果我们可以 看到extra这个信息是using index 也就是使用了索引覆盖。那么为什么呢?

我们知道storeid和filmid已经使用了索引覆盖,而且联合索引就这两个啊,为什么加了一个inventoryid还是走了索引覆盖呢,因为:这个inventoryid是个主键,我们本身使用辅助索引就会找到主键,然后回表找信息,我们已经拿到了id,所以还回啥表?

##总结