问题
在查询时,根据两个单独进行索引的字段进行查询,他的查询过程是什么样的?
答:数据库会先评估怎样使用索引是最快的(两个单独的索引和一个包含两个字段的复合索引会使用复合索引而不是用两个单独的索引,也有可能会使用一个索引,取决于在当时的环境),然后根据(这里使用两个单独的索引)第一个单独的索引进行查询然后使用另一个索引进行查询,最后进行回表。
如果我使用覆盖索引的时候把所有的字段都添加进这个复合索引他会比不添加索引快吗?在搜索数据时会进行回表吗?
答:如果把全部字段都放在复合索引中,在查询的时候会比不添加索引快,但是要对索引进行维护所以在插入、删除和修改的时候会比较慢,维护索引的时间会比较长而且哪怕是这样搜索也不是最佳选择,所以不常用,要保持复合索引中的字段尽可能的简洁。在搜索的时候不会进行回表。
使用了复合索引对主键索引进行覆盖之后,如果使用主键进行筛选会使用哪个索引?
在进行搜索的时候Mysql会对本次搜索进行判断选出完成搜索最快的方案,所以这两个索引没有固定使用。复合索引也没有取代主键索引。