面试题答案
一键面试覆盖索引解释
覆盖索引指的是一个索引包含(或者说覆盖)了满足查询语句中所有字段需要的数据。当查询所需的所有数据都能从索引本身获取,而无需回表操作(即从聚集索引或数据文件中再获取数据)时,就使用到了覆盖索引。
提升查询性能场景举例
假设我们有如下查询:
SELECT name, salary FROM employees WHERE department = 'HR';
如果我们在department
、name
和salary
字段上创建一个联合索引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);
创建覆盖索引时要注意字段顺序,一般将选择性高(重复值少)的字段放在前面,这样能更好地发挥索引的作用。