Appearance
一幅图看懂 Postgres 查询执行过程
详细解析
查询解析阶段 (Parser)
- 客户端发送 SQL 查询语句到解析器
- 示例查询:
SELECT * FROM users WHERE id = 123456;
- 解析器将 SQL 语句解析成解析树(parse tree)
- 解析树包含了查询的语法结构信息
查询重写阶段 (Rewriter)
- 接收解析树
- 应用规则和视图转换
- 生成查询树(query tree)
- 这个阶段可能会进行视图展开、规则应用等优化
查询规划阶段 (Planner)
- 接收查询树
- 生成执行计划
- 优化器会考虑以下因素:
- 表统计信息
- 可用索引
- 成本估算
- 选择最优的执行计划
查询执行阶段 (Executor)
- 接收执行计划
- 通过缓冲区管理器请求数据页
- 处理数据行
- 应用 WHERE 子句条件
- 投影所需的列
数据访问阶段 (BufferManager & Storage)
- 缓冲区管理器检查请求的数据页是否在内存中
- 如果数据页在缓冲区:
- 直接从缓冲区返回数据页
- 如果数据页不在缓冲区:
- 从磁盘读取数据页
- 更新缓冲区缓存
- 将数据页返回给执行器
结果返回
- 执行器处理完数据后
- 将最终结果集返回给客户端
这个流程展示了 PostgreSQL 如何高效地处理 SQL 查询,从解析到执行的全过程。每个阶段都有其特定的职责,共同确保查询能够正确且高效地执行。