大家好呀,我是你们的老朋友小米,31岁,依旧是个喜欢折腾技术的程序员。最近在帮一位朋友准备 MySQL 社招面试题时,碰到一个经典问题:“如何优化查询过程中的数据访问?”
听起来很朴素对吧?可真要聊透,里面可是门道多得很。今天我就给大家讲讲我和朋友的一次“面试题复盘”,顺便分享一些我这些年踩过的坑。
故事的开头:查询慢得像蜗牛
朋友小A是互联网公司的后端工程师。前段时间他在写一个订单统计模块的时候,发现一个 SQL 慢得离谱。点开页面后,数据要好几秒钟才出来,用户都快以为系统挂了。
小A抓耳挠腮,心里嘀咕:
“这明明是个普通查询,怎么会这么慢?是不是服务器不给力?”
结果一看,MySQL CPU 飙高,磁盘 I/O 也在哭喊。其实问题不是服务器不给力,而是 访问数据太多。这就是我们今天要聊的第一个关键点。
访问数据太多导致性能下降
在 MySQL 优化里,有一个常见的坑:数据拿得太多。
就好比你去超市买瓶水,结果推了整整一车回家,当然费劲了。
具体表现有两种:
- 行太多:应用程序从数据库里拖了一大堆行出来,但其实只需要其中的一小部分。
- 列太多:表里有几十个字段,你只要其中两三个,但却全都查出来。
面试官可能会追问:那怎么判断呢?
我通常会让开发同事先看看 SQL,是不是 在检索大量超过需要的数据。如果是,那就是“搬水却背沙子”的典型情况。
确认 MySQL 服务器是否在分析不必要的数据行
很多人光看返回结果觉得没问题,但其实数据库在背后做了巨大的“无用功”。
比如有一次我帮团队排查慢查询,用 EXPLAIN 一看,才发现 MySQL 服务器扫描了几十
MySQL 查询优化核心技巧

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



