第一个actor的id列并没有索引,因此查询时需要逐行扫描整个表进行条件过滤,所以叫Range Scan。第二个SELECT * FROM film WHERE id > 1,执行计划中的访问类型是Index。 这是因为表film的id列是主键,还有一个idxname的索引。由于主键列上自带唯一索引,因此在执行查询时可以直接利用该索引进行条件过滤,这就是index。
actor表只有一个主键索引,其他字段没有索引,film有一个主键索引,name列有一个普通索引。
执行“select * from actor where id > 1”时,会走id索引,但是因为还需要查非主键的字段,且其它字段不是索引,所以会有个回表查询。根据索引查询范围数据,且回表查询,故type=range。
执行“select * from film where id > 1”时,会走id索引,但是其它字段也是索引,所以不会有回表查询,而是去查name的索引。根据主键索引和name索引就能查询出你想要的结果,故不会有回表查询。根据索引查询范围数据,且不回表查询(只通过索引就查出了结果),故type=range。但这时type却=index,是因为数据库会自己根据实际情况做些优化,多添加点数据效果就变了。
望采纳,关注我,持续回答。
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!