news 2026/9/11 10:22:31

被大厂面试官怼了:“我问你查询走没走索引,你凭直觉跟我说‘大概’?”,那一刻我汗流浃背了......

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
被大厂面试官怼了:“我问你查询走没走索引,你凭直觉跟我说‘大概’?”,那一刻我汗流浃背了......

最近面了几家公司,本来觉得自己对 MySQL 索引那几条规则(什么最左匹配、不要在索引列上做运算)背得挺溜,结果前两天被面试官当场上了一课。

面试官问:“你平时怎么判断你的 SQL 到底有没有用到索引?”

我当时自信满满地回答:“只要我按照最左前缀原则写 WHERE 条件,它肯定就走索引了啊。”

面试官听完,盯着我看了三秒钟:“肯定?数据库优化器(Optimizer)是你家开的吗?它走不走索引还得看数据量、回表成本和区分度。你就凭直觉跟我说‘大概’?”

那一刻,我真的汗流浃背了。

回来之后,我对着电脑把EXPLAIN彻底翻烂了。其实判断一个查询是否真的得到了索引,不能靠“我觉得”,得靠数据库给出的“证据”。


1. 唯一证据:EXPLAIN 命令

在 MySQL 里,不管是多么复杂的查询,只要在SELECT前面加上一个EXPLAIN,数据库就会把它的执行计划(Execution Plan)吐出来。

这就好比去医院照 B 超,医生一眼就能看出你肚子里到底是“真有货”还是“全是气”。

EXPLAIN SELECT * FROM user WHERE age = 20;

执行完后,你会看到一堆字段。别被那十来个列吓到,只要能看懂这四个核心字段,基本就能稳住面试官。


2. 第一看:key—— 到底最后用了谁?

这是最直接的指标。

  • possible_keys:代表 MySQL 觉得有哪些索引可以用。这只是“备胎”名单。

  • key:代表 MySQL 真正决定使用的索引。

如果key这一列是NULL,那完了,这查询妥妥地在全表扫描,索引没派上用场。


3. 第二看:type—— 走索引的方式“高级”吗?

这一列是描述查询性能的关键。它显示的是连接类型,从好到坏的常见排序是:

system > const > eq_ref > ref > range > index > ALL

  • const/eq_ref:这是顶级玩家。通常是你用主键(Primary Key)或者唯一索引(Unique Index)去查询。

  • ref:普通索引命中。

  • range:范围查询。比如WHERE age > 18。虽然用了索引,但要扫一段范围。

  • index:全索引扫描。虽然也是扫索引树,但它是把整个索引树翻一遍,性能只比全表扫描好一丁点。

  • ALL:全表扫描。看到这个,直接原地反思代码。


4. 第三看:key_len—— 索引被“吃”了多少?

这是最容易被忽略、但也最能体现水平的指标。它表示索引使用的字节长度。

如果你建了一个联合索引(a, b, c),通过key_len你能判断出 MySQL 到底是只用了a,还是用了ab,甚至是a, b, c全用了。

  • 如果你的索引是int类型且允许为NULLkey_len通常是 5 字节(4 字节数据 + 1 字节标识位)。

  • 如果key_len比你预想的短,说明你的联合索引可能发生了“索引截断”,后面的字段失效了。


5. 第四看:Extra—— 那些隐藏的“潜规则”

这一列经常会出现一些很重要的额外信息:

  • Using index这是满分表现!说明发生了“索引覆盖”,你要的数据在索引树里全都有,根本不需要去磁盘回表查整行数据。

  • Using index condition:说明用了“索引下推(ICP)”,MySQL 在扫索引时就把不符合条件的过滤掉了,减少了回表次数。

  • Using filesort/Using temporary这是警告信号!说明 MySQL 没法利用索引排序,只能在内存甚至磁盘里自己排序,或者建了临时表。看到这个,你的 SQL 性能通常要拉胯。


总结:别凭直觉,看执行计划

以前我写代码总觉得“我写了索引,它就该生效”。但现实是,如果 MySQL 觉得全表扫描比走索引再回表还要快(比如你的WHERE条件过滤掉了 90% 以上的数据),它就会果断抛弃你的索引。

面试官怼得对:在技术面前,直觉是最不靠谱的东西。

下次再有人问你:“你怎么知道索引生效了?”

请冷静地回答他:“我会通过 EXPLAIN 查看 key 是否命中了索引,并结合 type 和 key_len 判断索引利用的广度和深度,最后通过 Extra 确认是否存在回表或索引覆盖。”

这一套词下来,估计面试官端着咖啡的手也要颤抖一下了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 2:45:58

win10 - 删除非法命名的文件夹的方法

文章目录win10 - 删除非法命名的文件夹的方法概述笔记删除非法命名的文件夹微PE工具箱 - 不行蜂鸟PE - OK备注备注尝试搞出一个畸形目录出来用手工在资源管理器中建立畸形目录,是不行的。用命令行试试在msys2-mingw64中试试备注备注ENDwin10 - 删除非法命名的文件夹…

作者头像 李华
网站建设 2026/9/11 2:53:23

必看!2025年单北斗GNSS形变监测高口碑产品排行榜

在2025年,单北斗GNSS形变监测设备凭借其高精度、可靠性和多功能性,成为市场上不可或缺的监测工具。该设备广泛应用于桥梁、隧道及地质灾害领域,通过实时数据分析,实现对结构的动态监测和预警。在众多优秀产品中,单北斗…

作者头像 李华
网站建设 2026/9/10 16:22:01

【计网】网络分层模型和http协议

前言计算机网络是一个复杂的系统,采取分层的结构,可以将复杂系统分解为可管理的模块。每层模块专注解决特定问题,使其各司其职,便于管理维护。在网络分层模型中,每个分层都接收由它下一层所提供的特定服务,…

作者头像 李华
网站建设 2026/9/10 23:39:04

Kotaemon在华为云上的部署实践:全流程记录

Kotaemon在华为云上的部署实践:全流程记录 在企业智能客服、知识库问答系统日益普及的今天,一个真正“可用”的AI代理不仅要能回答问题,更要答得准、有依据、可维护。然而现实是,许多基于大模型的聊天机器人仍困于“幻觉频发”“…

作者头像 李华
网站建设 2026/9/11 5:38:55

校园便利平台|基于springboot + vue校园便利平台系统(源码+数据库+文档)

校园便利平台 目录 基于springboot vue校园便利平台系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于springboot vue校园便利平台系统 一、前言 博主介绍&…

作者头像 李华
网站建设 2026/9/9 12:02:08

38、Linux 脚本编程:bc 计算器、数组与特殊技巧

Linux 脚本编程:bc 计算器、数组与特殊技巧 1. bc - 任意精度计算器语言 在处理整数运算时,shell 能满足很多需求,但当需要进行高级数学运算或使用浮点数时,shell 就显得力不从心了。这时可以借助外部程序,比如 bc 。 bc 是许多 Linux 系统上都有的计算器程序,它能…

作者头像 李华