MST

星途 面试题库

面试题:如何量化分析MySQL无索引查找的低效程度

假设给定一个MySQL数据库表,包含百万级别的记录,且当前查询无索引。请说明如何通过工具或者技术手段,量化分析无索引查找相较于使用合适索引查找的低效程度,比如通过计算查询执行时间、扫描行数等指标,并给出具体的操作步骤和分析思路。
34.2万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

分析思路

  1. 查询执行时间:记录无索引查询和有索引查询开始与结束时间,计算差值,差值越大说明无索引查找越低效。
  2. 扫描行数:查看查询执行计划,无索引时可能全表扫描,扫描行数多;有索引时能定位特定行,扫描行数少,差值反映低效程度。

操作步骤

  1. MySQL 环境准备:确保 MySQL 安装并启动,有包含百万级记录的表,例如表名为 large_table,有字段 idname 等。
  2. 无索引查询
    • 查询执行时间:在 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
  3. 添加索引:执行 CREATE INDEX idx_name ON large_table(name); 创建合适索引。
  4. 有索引查询
    • 查询执行时间:同无索引查询记录时间方式,开始时间 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
  5. 分析结果:对比 time_diff1time_diff2time_diff1 远大于 time_diff2 说明无索引查询执行时间长;对比 rows1rows2rows1 远大于 rows2 说明无索引时扫描行数多,从这两个方面量化无索引查找的低效程度。