Skip to content

一幅图看懂 Postgres 查询执行过程

详细解析

  1. 查询解析阶段 (Parser)

    • 客户端发送 SQL 查询语句到解析器
    • 示例查询:SELECT * FROM users WHERE id = 123456;
    • 解析器将 SQL 语句解析成解析树(parse tree)
    • 解析树包含了查询的语法结构信息
  2. 查询重写阶段 (Rewriter)

    • 接收解析树
    • 应用规则和视图转换
    • 生成查询树(query tree)
    • 这个阶段可能会进行视图展开、规则应用等优化
  3. 查询规划阶段 (Planner)

    • 接收查询树
    • 生成执行计划
    • 优化器会考虑以下因素:
      • 表统计信息
      • 可用索引
      • 成本估算
    • 选择最优的执行计划
  4. 查询执行阶段 (Executor)

    • 接收执行计划
    • 通过缓冲区管理器请求数据页
    • 处理数据行
    • 应用 WHERE 子句条件
    • 投影所需的列
  5. 数据访问阶段 (BufferManager & Storage)

    • 缓冲区管理器检查请求的数据页是否在内存中
    • 如果数据页在缓冲区:
      • 直接从缓冲区返回数据页
    • 如果数据页不在缓冲区:
      • 从磁盘读取数据页
      • 更新缓冲区缓存
    • 将数据页返回给执行器
  6. 结果返回

    • 执行器处理完数据后
    • 将最终结果集返回给客户端

这个流程展示了 PostgreSQL 如何高效地处理 SQL 查询,从解析到执行的全过程。每个阶段都有其特定的职责,共同确保查询能够正确且高效地执行。