分页设计的三十年陷阱:从OFFSET的性能灾难到Cursor的工程突围

一位开发者在生产环境遇到了一个奇怪的问题:分页查询在前100页运行良好,但当用户翻到第500页时,原本2秒的查询变成了2分钟。数据库CPU飙升,整个系统响应变慢。罪魁祸首?那个看起来人畜无害的 LIMIT 10000, 20。 ...

9 min · 4388 words

为什么数据库索引选择B+树而不是Hash?从磁盘IO特性到范围查询的技术真相

title: “为什么数据库索引选择B+树而不是Hash?从磁盘IO特性到范围查询的技术真相” date: “2026-03-07T05:05:02+08:00” description: “为什么数据库索引选择B+树而不是Hash?从磁盘IO特性到范围查询的技术真相” draft: false categories: [“数据库”, “系统设计”] tags: [“B+树”, “Hash索引”, “数据库索引”, “InnoDB”, “PostgreSQL”, “磁盘IO”, “范围查询”] 1972年,Rudolf Bayer和Edward McCreight在波音研究实验室工作时遇到了一个棘手问题:如何高效地组织存储在磁盘上的大量有序数据?他们在当年发表的论文"Organization and Maintenance of Large Ordered Indexes"中提出了B树(B-tree),这个数据结构在此后的半个世纪里统治了数据库索引设计。但有一个疑问始终困扰着许多开发者:Hash表在内存中拥有O(1)的查找效率,为什么数据库偏偏选择了看起来更慢的B+树? ...

8 min · 3671 words

索引越多查询越慢?从写入放大到优化器误判的完整技术解析

一个开发者盯着慢查询日志,发现一条耗时3秒的SELECT语句。他熟练地添加了一个索引,查询时间降到50毫秒。第二天,他又用同样的方法解决了另一个慢查询。一个月后,这张表已经积累了12个索引。 ...

11 min · 5161 words