1. 回表操作
在MySQL中,普通索引查询通常需要先通过主键索引找到记录的位置,再回表查询具体数据。这一过程被称为回表(Table Navigation),其核心作用是快速定位数据位置,减少IO操作时间。
2. 覆盖索引
覆盖索引是一种优化技术,主要用于减少回表操作。当查询条件完全匹配联合索引的最左字段或主键时,直接返回结果,无需回表,显著提升查询性能。例如,使用联合索引(age, name)时,查询age=1或age=1 and name='张三'可以直接获取结果,而仅查询name='张三'则可能无法利用索引。此外,建议根据查询频率合理安排索引顺序,优先为高频查询字段创建索引。
3. 最左前缀原则
联合索引的最左字段或字符串索引的最左部分决定了索引的匹配范围。例如,联合索引(age, name)的最左前缀为age字段,而字符串索引的最左部分则是字符串的前缀部分。在实际应用中,建议根据业务需求合理设计索引结构,以便高效满足查询需求。
4. 索引下推
在处理类似'hello%'和age>10的查询时,传统MySQL版本会先回表查询匹配数据,然后过滤掉不符合条件的记录。而从MySQL5.6版本开始,索引下推技术会优化这一过程:首先过滤掉age<10的数据,再回表查询匹配的记录,显著降低回表率,提升查询效率。
笔记来源于《极客时间:MySQL实战45讲:深入浅出索引(下)》