如果一个索引包含(或者说覆盖)所有需要查询的字段的值,我们就称之为“覆盖索引”。指的是通过索引就能查询到我们所需要的数据,而不需要根据索引再去查询数据表中的数据( 回表),这样就减少了数据库的 io 操作,提高查询效率。
使用表中的多个字段创建索引,就是联合索引,也叫组合索引或复合索引。
最左前缀匹配原则指的是在使用联合索引时,MySQL 会根据联合索引中的字段顺序,从左到右依次到查询条件中去匹配,如果查询条件中存在与联合索引中最左侧字段相匹配的字段,则就会使用该字段过滤一批数据,直至联合索引中全部字段匹配完成,或者在执行过程中遇到范围查询,如 >、<、between 和 以%开头的like查询 等条件,才会停止匹配。
所以,我们在使用联合索引时,可以将区分度高的字段放在最左边,这也可以过滤更多数据。
索引下推(Index Condition Pushdown) 是 MySQL 5.6 版本中提供的一项索引优化功能,可以在非聚簇索引遍历过程中,对索引中包含的字段先做判断,过滤掉不符合条件的记录,减少回表次数。