网易首页 > 网易号 > 正文 申请入驻

MySQL把7个查询优化藏了20年,开发者现在才看懂

0
分享至


你的数据库只有3个用户在线,CPU却飙到90%。这种场景不是段子,是过去20年里无数开发者的日常。2024年Stack Overflow调研显示,数据库性能问题仍占后端故障的34%,而优化手段其实早写在文档里——只是没人按顺序读。

索引不是越多越好,是越准越好

索引(Index)是SQL加速的默认答案,但误用索引比不用更惨。我见过一个电商表建了47个索引,写入速度掉到原来的1/8。

单列索引的基础用法很直接:给email字段加索引,查询时跳过全表扫描。

CREATE INDEX idx_email ON users(email);

但真实业务很少单条件查询。用户要查"某邮箱2024年后注册",复合索引(Composite Index)才是正解——顺序决定生死,必须是email在前、created_at在后。

CREATE INDEX idx_email_created ON users(email, created_at);

代价也真实存在:每个索引都是写操作的税负,也是磁盘空间的租客。监控工具里看到索引命中率低于95%,就该考虑 pruning(剪枝)了。

SELECT * 是性能黑洞

偷懒写SELECT *就像搬家时把整栋楼塞进货车,只为取一件外套。带宽和内存在这行代码里无声燃烧。

对比这两行:

-- 浪费版:拉取所有字段再丢弃
SELECT * FROM users WHERE created_at > '2025-01-01';

-- 精确版:只取需要的email
SELECT email FROM users WHERE created_at > '2025-01-01';

数据量过百万时,这个习惯能差出10倍延迟。更隐蔽的问题是ORM(对象关系映射)框架的默认行为——很多开发者甚至没意识到自己发出了SELECT *。


把过滤留给数据库,别自己写循环

在应用层过滤数据是新手经典错误。SQL引擎用C++写了几十年的优化器,不是让你用Python for-loop复刻的。

低效模式:先SELECT *全表,再if判断日期。

高效模式:WHERE子句直接过滤。

SELECT * FROM users WHERE created_at >= '2026-01-01';

背后的执行路径完全不同。前者把整表数据拖过网络,后者让数据库用索引直接定位。PostgreSQL的EXPLAIN(执行计划分析)会显示"Seq Scan"还是"Index Scan"——看到前者就该警觉。

EXPLAIN是你欠下的技术债

每个主流数据库都内置了查询计划查看器,但使用率不到15%。这相当于买车从不看油耗表。

MySQL、PostgreSQL、SQL Server都支持:

EXPLAIN SELECT * FROM users WHERE email = 'alice@example.com';

输出里的"Seq Scan"意味着全表扫描,"Index Scan"才是健康状态。有个团队曾花两周优化代码,最后发现只是缺个索引——EXPLAIN 30秒就能定位。

更高级的版本是EXPLAIN ANALYZE,会显示实际执行时间和行数估计的偏差。当估计值和实际值差10倍以上,说明统计信息过期,需要ANALYZE TABLE。

N+1查询:ORM时代的瘟疫

这个问题在ORM普及后变本加厉。代码看起来优雅,发出的SQL却灾难。


场景:取100个用户,再逐个查他们的订单。

结果:1条查询变101条。 latency(延迟)从10ms涨到2秒。

解法是JOIN(连接查询)或预加载(Eager Loading)。Django的select_related、Rails的includes、SQLAlchemy的joinedload都是同一思路——用一次查询拿齐数据,而不是往返100次。

监控工具里看到"Queries per request"指标飙升,就该检查N+1。

分页不是OFFSET越跳越慢

传统分页用OFFSET,翻页越深越惨。OFFSET 100000时,数据库要先扫过10万行再丢弃。

游标分页(Cursor-based Pagination)用上一页的最后ID做锚点:

SELECT * FROM users WHERE id > 100000 ORDER BY id LIMIT 20;

时间复杂度从O(n)降到O(1)。Twitter、Instagram的时间线都用这方案。代价是不支持随机跳页,但用户真的需要跳到第8473页吗?

批量操作:原子性和性能的平衡

循环里单条INSERT是性能自杀。批量写入能减少网络往返和事务开销。

但批量不是无限大。MySQL的max_allowed_packet默认4MB,PostgreSQL的max_bind_parameters有上限。实测找到甜点——通常是500-5000条一批。

UPSERT(INSERT ... ON CONFLICT)比先SELECT再INSERT更省一次查询。批量DELETE同理,用IN子句代替循环。

有个细节:批量操作锁表时间更长,高并发场景要拆小批次。这不是非黑即白,是 trade-off(权衡)的艺术。

2025年PostgreSQL 17把JIT(即时编译)编译器默认开启,某些查询快30%。但文档里加了一句:"如果你的查询本来就快,JIT会让它更慢。"优化没有银弹,只有测量、调整、再测量。你的慢查询,EXPLAIN看了吗?

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
斯诺克4强诞生!特鲁姆普绝杀墨菲,赵心童5-3,丁俊晖天降喜讯!

斯诺克4强诞生!特鲁姆普绝杀墨菲,赵心童5-3,丁俊晖天降喜讯!

曹说体育
2026-04-02 11:54:47
从一个九零后网约车司机被逼死,到人与动物的区别

从一个九零后网约车司机被逼死,到人与动物的区别

林中木白
2026-04-02 15:11:56
特朗普:万斯正负责与伊朗谈判相关协议,要是没达成协议,我就怪万斯,要是达成了,功劳全在我

特朗普:万斯正负责与伊朗谈判相关协议,要是没达成协议,我就怪万斯,要是达成了,功劳全在我

鲁中晨报
2026-04-02 14:29:03
定了!燃油附加费4月5日起上调,涨幅5倍

定了!燃油附加费4月5日起上调,涨幅5倍

中国石油石化
2026-04-01 21:15:52
4-0!首个8强诞生,王曼昱剃光头,静待张本美和,孙颖莎难了!

4-0!首个8强诞生,王曼昱剃光头,静待张本美和,孙颖莎难了!

曹说体育
2026-04-02 15:56:18
世界杯爆大冷!世界冠军1-3出局,国乒小将惨败,张本美和剃光头

世界杯爆大冷!世界冠军1-3出局,国乒小将惨败,张本美和剃光头

林子说事
2026-04-02 11:04:36
“美国喊停你不听”,一个重要信号表明,内塔尼亚胡真怕了

“美国喊停你不听”,一个重要信号表明,内塔尼亚胡真怕了

民间胡扯老哥
2026-03-31 08:08:09
不焯水等于“吃毒”?这5种春菜再懒也要焯水,别忘了告诉家人

不焯水等于“吃毒”?这5种春菜再懒也要焯水,别忘了告诉家人

神牛
2026-04-02 14:27:40
美防长指责中俄援伊,威胁迟早算账,特朗普:正与伊朗新政权谈判

美防长指责中俄援伊,威胁迟早算账,特朗普:正与伊朗新政权谈判

顾史
2026-04-02 19:57:09
正部级刘昆,当选新职

正部级刘昆,当选新职

上观新闻
2026-04-02 06:17:03
特朗普发表讲话,美股期货全线下跌,黄金白银跳水

特朗普发表讲话,美股期货全线下跌,黄金白银跳水

21世纪经济报道
2026-04-02 10:34:04
银行取钱新规来了,2026执行,个人存取5万以上现金,不再说用途

银行取钱新规来了,2026执行,个人存取5万以上现金,不再说用途

闻识
2026-04-02 18:16:20
陈小春和应采儿在阿联酋被偶遇!没想到应采儿这么高,真系靓!

陈小春和应采儿在阿联酋被偶遇!没想到应采儿这么高,真系靓!

智慧生活笔记
2026-04-02 14:58:01
救美国就是救中国?中方终于抛弃一切幻想!美债仓位腰斩转向黄金

救美国就是救中国?中方终于抛弃一切幻想!美债仓位腰斩转向黄金

安珈使者啊
2026-04-02 12:04:44
美军想不通:屏蔽中东GPS,竟被重庆两百块高尔夫测距仪破解

美军想不通:屏蔽中东GPS,竟被重庆两百块高尔夫测距仪破解

百科密码
2026-04-01 16:36:30
自有官媒给张雪辩经

自有官媒给张雪辩经

阿亮评论
2026-04-02 13:55:22
美国山姆在中国爆火,打的是谁的脸?

美国山姆在中国爆火,打的是谁的脸?

涛哥锐评
2026-04-01 10:12:43
人民需要人民医院

人民需要人民医院

阿亮评论
2026-04-02 19:00:49
银行信贷部老同学揭秘“房价跌不跌已经不重要了…”

银行信贷部老同学揭秘“房价跌不跌已经不重要了…”

慧翔百科
2026-04-01 09:02:03
继德国之后,英国也开始贴出“中文标语”?中国游客:不能够接受

继德国之后,英国也开始贴出“中文标语”?中国游客:不能够接受

策前论
2026-04-02 18:24:45
2026-04-02 20:40:50
闪存猎手
闪存猎手
全网蹲好价的野生捕手,算力与羊毛都不可辜负。
695文章数 3关注度
往期回顾 全部

科技要闻

三年亏20亿,最新估值58亿,Xreal冲刺港股

头条要闻

张雪妻子:近两年才还清所有私人欠款 我不是好命的人

头条要闻

张雪妻子:近两年才还清所有私人欠款 我不是好命的人

体育要闻

邵佳一的改革,从让每个人踢舒服开始

娱乐要闻

宋宁峰带女儿出轨,张婉婷找董璇哭诉

财经要闻

市场被特朗普一句话打醒 滞胀交易回归

汽车要闻

轴距2米7/后排能跷腿 试驾后驱小车QQ3 EV

态度原创

健康
亲子
艺术
本地
公开课

干细胞抗衰4大误区,90%的人都中招

亲子要闻

“嘴替”月嫂拯救我,娃一睡着婆婆就把娃弄醒月嫂说手痒就去挖坟

艺术要闻

故人西辞黄鹤楼,烟花三月下扬州

本地新闻

从学徒到世界冠军,为什么说张雪的底气在重庆?

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版