如果联合索引 abc 全部命中,并且后续的查询条件中使用了 a 字段的 LIKE '%a%',该联合索引仍然会被使用。因为在执行查询时,MySQL 会将联合索引 abc 进行过滤和排序,并且将过滤后的数据集作为基础数据集进行进一步的搜索和计算。在执行 LIKE '%a%' 这样的查询条件时,MySQL 会扫描过滤后的数据集来判断哪些行匹配了 a 的模糊匹配条件。
虽然 LIKE 查询条件可能比其他类型的条件更加计算密集,但只要过滤索引的基础数据集足够小,MySQL 仍然可以在相对较短的时间内完成对符合条件的行的搜索。当然,如果过滤后的数据集太大,MySQL 也会出于优化的考虑,选择使用全表扫描代替使用联合索引来完成查询,这取决于优化器的判断和决策。
需要注意的是,虽然使用联合索引可以加速查询速度,但是过多的联合索引也会给数据库带来一定的开销,包括索引文件大小增加、数据库的维护和更新成本增加等。因此,在创建表的索引时,需要根据实际的业务需求和查询情况,权衡使用联合索引所带来的开销和效果。