mysql技巧(三)

覆盖索引

概念

如果索引包含所有满足查询需要的数据的索引成为覆盖索引(Covering Index),也就是平时所说的不需要回表操作

判断标准

使用explain,可以通过输出的extra列来判断,对于一个索引覆盖查询,显示为using index,MySQL查询优化器在执行查询前会决定是否有索引覆盖查询

案例

表结构如下,表数据总共485273条。

查询所有字段,没有中索引,使用文件排序。

查询type字段,也使用了文件排序。速度比全字段查询快30%。

覆盖索引,通过explain可以看到,extra中存在Using index表示,中了覆盖作用。rows扫描行数也是理论上最低的200002行。

延迟关联

延迟关联就是通过使用覆盖索引查询返回需要的主键,再根据主键关联原表获得需要的数据。

继续上面你的例子。这次我们查询200条数据。普通方法使用了0.338s。

使用延迟关联,如下,

及时查询了2次,外加一次关联,也比普通搜索快了很多。