面试题答案
一键面试分析思路
- 查询执行时间:记录无索引查询和有索引查询开始与结束时间,计算差值,差值越大说明无索引查找越低效。
- 扫描行数:查看查询执行计划,无索引时可能全表扫描,扫描行数多;有索引时能定位特定行,扫描行数少,差值反映低效程度。
操作步骤
- MySQL 环境准备:确保 MySQL 安装并启动,有包含百万级记录的表,例如表名为
large_table
,有字段id
、name
等。 - 无索引查询:
- 查询执行时间:在 MySQL 客户端执行查询前记录开始时间
start_time1 = NOW()
,执行查询语句SELECT * FROM large_table WHERE name = '特定值';
,查询结束后记录结束时间end_time1 = NOW()
,计算时间差time_diff1 = TIMESTAMPDIFF(SECOND, start_time1, end_time1)
。 - 扫描行数:执行
EXPLAIN SELECT * FROM large_table WHERE name = '特定值';
,查看rows
字段,记录扫描行数rows1
。
- 查询执行时间:在 MySQL 客户端执行查询前记录开始时间
- 添加索引:执行
CREATE INDEX idx_name ON large_table(name);
创建合适索引。 - 有索引查询:
- 查询执行时间:同无索引查询记录时间方式,开始时间
start_time2 = NOW()
,执行查询SELECT * FROM large_table WHERE name = '特定值';
,结束时间end_time2 = NOW()
,计算时间差time_diff2 = TIMESTAMPDIFF(SECOND, start_time2, end_time2)
。 - 扫描行数:执行
EXPLAIN SELECT * FROM large_table WHERE name = '特定值';
,查看rows
字段,记录扫描行数rows2
。
- 查询执行时间:同无索引查询记录时间方式,开始时间
- 分析结果:对比
time_diff1
与time_diff2
,time_diff1
远大于time_diff2
说明无索引查询执行时间长;对比rows1
与rows2
,rows1
远大于rows2
说明无索引时扫描行数多,从这两个方面量化无索引查找的低效程度。