Skip to content

PostgreSQL 学习笔记

更新: 11/3/2025 字数: 0 字 时长: 0 分钟

为什么说 PostgreSQL 是数据库天花板?

PostgreSQL (简称 PG) 被誉为人类历史最强关系型数据库,它不仅可以完全替代 MySQL,还在大部分场景下可以当作 MongoDB、Elasticsearch、Redis、InfluxDB 来使用。

PG 之所以如此全能,核心在于它原生支持各种各样的索引,并且架构上支持扩展。

索引是什么

数据库本质上是用来读写数据的服务。为了快速查找数据,数据库需要一个类似书本目录的工具,这个工具就是 索引

不同类型的索引可以加速搜索不同类型的数据。

B+ 树是关系型数据库最常见的索引,用于加速等值查询和范围查询。

  • 原理:通过树状结构,上层的数据页可以快速缩小查找范围,加速定位到要查找的数据页。
  • PG 的优化:PG 在 B+ 树的基础上做了一些优化,称为 B-Link 树,主要提升了并发处理能力。

GIN

Generalized Inverted Index 通用倒排索引,通过词元反查主键 ID,做交并集。

主要用于全文搜索和 JSONB 数据类型的查询。

  • 全文搜索
    • 原理:对文本进行切分(分词),记录词元和文本 ID 的映射关系。搜索时,通过词元反查文本 ID,实现快速匹配。
    • 应用:让 PG 在很多场景下可以替代 Elasticsearch。
  • JSONB 查询
    • JSONB:PG 对 JSON 格式进行了优化,去掉了冗余信息,使用二进制格式存储,称为 JSONB (JSON Binary)。
    • 原理:可以将 JSONB 里的键值对拆分生成二进制哈希,构建倒排索引。当需要查询时,先将查询的键值对转换为对应的哈希值,然后再查找这个哈希值,得到主键 ID。
    • 应用:在 GIN 索引的加持下,百万级别的 JSONB 文档也能保持毫秒级别的查询性能,因此很多人说 PG 可以直接替代 MongoDB。

GiST

Generalized Search Tree 通用搜索树,用于处理多维数据,尤其在地理信息系统 (GIS) 领域表现出色。

  • 原理:将多维数据(如经纬度)放入树状结构中,非叶子节点存放多维数据范围(如矩形),叶子节点存放实际数据。通过判断范围是否相交来快速定位数据。
  • 扩展性:GiST 是一个统一的搜索框架,可以扩展到三维甚至更高维度的数据。
  • 应用:使 PG 成为一个专业的地理信息系统、R-Tree(Rectangle Tree 矩形树)。

BRIN

Block Range Index 块范围索引,适用于按时间顺序插入的海量数据(时序数据),如日志、监控打点数据。

  • 原理:不为每一行数据建索引,而是为每一批数据页建立一个范围摘要,记录这批数据页中某个字段的最大值和最小值。查询时,通过扫描这个小小的范围摘要表,快速确定数据所在的页范围。
  • 优点:以极小的存储代价换取相当可观的查询性能。
  • 应用:让 PG 可以直接替代 InfluxDB 这类时序数据库。

总结

PostgreSQL 之所以强大,是因为它通过支持多种索引,实现了对不同数据类型的高效处理:

  • B-Link 树:提供了关系型数据库的高效精确查询能力。
  • GIN 索引:拥有了全文搜索和复杂 JSON 文档查询能力。
  • GiST 索引:拥有了地理信息处理能力。
  • BRIN 索引:拥有了时序数据处理能力。

更重要的是,PG 还支持通过插件接入自定义索引,具备无限的扩展可能性。

贡献者

The avatar of contributor named as LI SIR LI SIR

页面历史