MySQL 是如何执行一条 SQL 的
一条看似简单的 SELECT * FROM user WHERE id = 1;,在 MySQL 5.7 内部其实穿越了多层组件、多个内存数据结构、多种日志,才最终把结果返回给你。本文以 MySQL 5.7 为基线(其核心机制在 5.7 / 8.0 之间高度一致,差异点会单独标注),从一名数据库内核工程师的视角,把这条链路完整拆开。
一条看似简单的 SELECT * FROM user WHERE id = 1;,在 MySQL 5.7 内部其实穿越了多层组件、多个内存数据结构、多种日志,才最终把结果返回给你。本文以 MySQL 5.7 为基线(其核心机制在 5.7 / 8.0 之间高度一致,差异点会单独标注),从一名数据库内核工程师的视角,把这条链路完整拆开。
做业务开发的同学,大概都有过被 MySQL 慢查询折磨的经历——明明索引建了、数据量也不大,接口却总是超时。常规的加索引、加缓存套路固然有效,但有时候换个思路反而能四两拨千斤。本文整理了项目中几个真实慢查询案例的优化思路,部分方案稍显「偏门」,但亲测有效。
在做系统设计时,数据库选型是一个关键决策。MySQL 和 Elasticsearch 是两种不同定位的存储方案,今天结合实际项目经验,系统性地对比一下它们的适用场景。
| 特性 | MySQL | Elasticsearch |
|---|---|---|
| 定位 | 关系型数据库 | 分布式搜索和分析引擎 |
| 数据结构 | 行存储,B+树索引 | 倒排索引,文档型 |
| 擅长 | 事务、关联查询、结构化数据 | 全文搜索、聚合分析、海量数据 |
| 数据模型 | Table(表) | Index(索引),Document(文档) |
蒋廷黻的《中国近代史》是一本薄薄的小书,最初是 1938 年他在清华授课的讲义,后整理出版。全书只有五万字,但信息密度极高,每一句话都值得咀嚼。
这本书最让我印象深刻的地方,是它冷静得不像是中国人写的近代史。蒋廷黻拒绝用"列强欺负我们"的受害者叙事,而是把焦点转向"我们自己没做对什么"。
1998 年朱塞佩·托纳多雷拍出《海上钢琴师》时,距他上一部经典《天堂电影院》已经过去整整十年。这部片在欧洲票房并不亮眼,但通过影碟市场在全世界积累了一群狂热的观众——很多人在看完之后,会长时间沉默。
这部片最大的独到之处,是它讨论了一个悖论:什么才是真正的自由——选择下船,还是不下船?
尤瓦尔·赫拉利的《人类简史:从动物到上帝》(Sapiens: A Brief History of Humankind)是一本让人读完之后看世界都变了颜色的书。它不只讲历史,更讲人类凭什么走到今天。
这本书的中文版由中信出版社出版(林俊宏译),是 2012 年希伯来文版和 2014 年英文版的中译。赫拉利的野心很大——他把 7 万年的智人史压缩进一本书,但每一页都藏着一颗让人停下来想半天的炸弹。
上一篇读书笔记聊了 DDD 的聚合根,这篇接着聊两个更高层次的概念:限界上下文(Bounded Context) 和 领域事件(Domain Event)。这两个概念是解决"大型系统如何演进"的核心工具。
在分布式高并发的后端架构中,数据库死锁(Deadlock)就像一个幽灵。尽管 InnoDB 引擎具备全自动的自救回滚机制,但频繁出现的死锁报错(错误码 1213)不仅会吞噬系统吞吐量,更是代码健壮性不足的显性信号。本文去掉生活化的类比,直接从资源竞争的结构本质出发,层层递进地拆解 MySQL 死锁的底层逻辑。
Eric Evans 的《领域驱动设计》(Domain-Driven Design)出版于 2003 年,到现在已经 20 多年。但每次重读这本书,都能从中学到新的东西。这一次我想专门聊聊"聚合根"这个概念——它是我在复杂业务系统里最常用、也最容易用错的设计工具。
米兰·昆德拉的《不能承受的生命之轻》(The Unbearable Lightness of Being)是我读过的最哲学的小说之一。它不是传统意义上的爱情故事,而是一场关于"存在"的思想实验。
核心命题很简单:如果生命只走一次,所有选择都只发生一次,那么轻还是重?
有一首小诗刷屏了十几年,英文叫《TIME ZONE》,中文叫《纽约比加州时间早三个小时》或《放轻松,你没有落后》,作者一栏通常写「佚名」。
它讲的道理很简单:别人快或慢,跟你没有关系,因为你们不在同一条时间线上。
中文译文采用流传最广的版本,个别断句做了润色。
1987 年 Héctor García-Molina 与 Kenneth Salem 在 ACM SIGMOD Record 发表《Sagas》论文,提出将长事务拆分为多个子事务并通过补偿机制回滚的概念。这篇论文在 30 多年后成为微服务架构下分布式事务的核心方案之一。
但 Saga 不是银弹。在 Saga 之前,计算机科学界已经研究过 2PC(两阶段提交)几十年;在 Saga 之后,2007 年 Pat Helland 在《Life beyond Distributed Transactions: an Apostate’s Opinion》中明确宣告跨域分布式事务不可能存在。正是在这种矛盾中,国内电商场景孕育出了 TCC(Try-Confirm-Cancel)模式,并由阿里 DTP、ByteTCC、Seata 等开源框架落地。