MySQL 的覆盖索引是什么?
MySQL 的覆盖索引是什么?
回答重点
MySQL 的覆盖索引(Covering Index)是指二级索引中包含了查询所需的所有字段,从而使查询可以仅通过访问二级索引而不需要访问实际的表数据(主键索引)。
扩展知识
覆盖索引的优点
- 减少I/O操作:因为查询可以直接从索引中获取所有需要的数据,避免了访问实际表的数据页,从而减少了I/O操作。
- 提高查询速度:索引比表数据更紧凑,因此从索引中读取数据比从表中读取要快。
- 减少内存占用:只需要读取索引页而不是表数据页,可以减少内存占用。
覆盖索引示例
比如,目前有一张表:
1 | CREATE TABLE employees ( |
我们需要获取员工的姓、名和雇佣日期:
1 | SELECT last_name, first_name, hire_date |
对于这个查询,idx_name_hiredate 就是一个覆盖索引,因为它包含了查询所需的所有列 last_name、first_name 和 hire_date,MySQL 可以直接从这个索引中获取结果,而无需访问实际的主键索引的数据。
如果需求变化,要多查找一个 department_id 信息:
1 | SELECT last_name, first_name, hire_date, department_id |
此时就无法利用覆盖索引了,因为 idx_name_hiredate 上并不包含 department_id,所以需要从主键索引中获得数据。
Comments