面试题答案
一键面试1. 合理创建索引提高排序效率的方法
- 覆盖索引:确保索引包含查询和排序所需的所有列。这样在执行查询时,MySQL可以直接从索引中获取数据,无需回表操作,从而大大提高查询和排序效率。例如,如果查询语句为
SELECT column1, column2 FROM table_name ORDER BY column2;
,可以创建一个复合索引CREATE INDEX idx_column1_column2 ON table_name (column1, column2);
,让索引覆盖查询和排序的列。 - 最左前缀原则:对于复合索引,要按照查询和排序中列的使用顺序创建索引。例如,查询语句
SELECT * FROM table_name WHERE column1 = 'value1' ORDER BY column2;
,应创建索引CREATE INDEX idx_column1_column2 ON table_name (column1, column2);
,因为MySQL在使用索引时遵循最左前缀原则,先使用column1
进行过滤,再使用column2
进行排序。
2. 举例说明
假设有一个employees
表,结构如下:
CREATE TABLE employees (
id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
department VARCHAR(50),
salary DECIMAL(10, 2)
);
如果我们经常执行查询SELECT first_name, last_name FROM employees ORDER BY department, salary;
,为了优化该查询的排序操作,可以创建如下复合索引:
CREATE INDEX idx_department_salary ON employees (department, salary);
这样,MySQL在执行该查询时,可以利用此索引快速定位到符合条件的数据,并按照索引中的顺序进行排序,避免了Filesorts操作,提高了排序效率。