MST

星途 面试题库

面试题:MySQL索引的覆盖索引原理及应用场景

在MySQL数据库中,已知有一张员工表employees,包含字段employee_id、name、department、salary等。请解释什么是覆盖索引,并举例说明在什么情况下使用覆盖索引可以显著提升查询性能,同时说明如何创建覆盖索引。
27.2万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

覆盖索引解释

覆盖索引指的是一个索引包含(或者说覆盖)了满足查询语句中所有字段需要的数据。当查询所需的所有数据都能从索引本身获取,而无需回表操作(即从聚集索引或数据文件中再获取数据)时,就使用到了覆盖索引。

提升查询性能场景举例

假设我们有如下查询:

SELECT name, salary FROM employees WHERE department = 'HR';

如果我们在departmentnamesalary字段上创建一个联合索引CREATE INDEX idx_department_name_salary ON employees (department, name, salary);。此索引包含了查询所需的所有字段,MySQL可以直接从这个索引中获取数据,无需再去访问表数据,从而提升查询性能。特别是在表数据量较大时,这种性能提升会更加显著。

创建覆盖索引方法

以MySQL为例,语法如下:

-- 创建普通覆盖索引
CREATE INDEX index_name ON table_name (column1, column2, ...);

-- 创建唯一覆盖索引
CREATE UNIQUE INDEX index_name ON table_name (column1, column2, ...);

例如上述例子中创建覆盖索引:

CREATE INDEX idx_department_name_salary ON employees (department, name, salary);

创建覆盖索引时要注意字段顺序,一般将选择性高(重复值少)的字段放在前面,这样能更好地发挥索引的作用。