PostgreSQL执行计划的使用与查看教程

 更新时间:2025年09月15日 10:01:26   作者:yuejuejin  
PostgreSQL中的执行计划(或查询计划)是数据库管理系统用来详细说明如何执行特定SQL查询的一系列操作步骤,简单来说,执行计划就是数据库如何解读你的SQL语句,本文给大家介绍了PostgreSQL执行计划的使用与查看教程,需要的朋友可以参考下

pg的执行计划和MySQL的执行计划的显示有一点不一样,我得补习一下。

1. 基本命令:EXPLAIN

EXPLAIN 命令会显示 PostgreSQL 规划器为给定的 SQL 语句生成的执行计划。它不会实际执行该语句,只是预测其执行路径和成本。

语法:

EXPLAIN your_sql_statement;

示例:

EXPLAIN SELECT * FROM users WHERE email = 'test@example.com';

输出内容解读:

输出是一个树形结构,一般是从下向上看执行步骤,只需要关注下面几点:

操作类型 (Node Type) :表示执行的操作,如 Seq Scan(顺序扫描)、Index Scan(索引扫描)、Hash Join(哈希连接)、Sort(排序)等。

关联关系 (Relationship) :显示表之间的关联方式,如 INNER 或 LEFT

成本 (Cost) :包含两个数字,例如 (cost=0.00..15.03 rows=1 width=44)

  • 0.00:启动成本,即获取第一行数据的预估成本。
  • 15.03:总成本,即获取所有行数据的预估成本。
  • rows=1:预估返回的行数。
  • width=44:预估每行数据的平均宽度(字节)。

实际数据 (Actual) :如果你使用 EXPLAIN ANALYZE,这里会显示实际执行的数据。

2. 关键命令:EXPLAIN ANALYZE

这是最常用且最强大的组合。EXPLAIN ANALYZE 会实际执行 SQL 语句,并返回真实的执行计划和实际的执行统计信息(如时间、返回行数)。

语法:

EXPLAIN ANALYZE your_sql_statement;

示例:

EXPLAIN ANALYZE SELECT * FROM orders WHERE user_id = 123 AND status = 'shipped';

输出内容解读:
除了 EXPLAIN 的信息外,还会增加:

实际时间 (Actual Time) :例如 (actual time=0.018..0.019 rows=1 loops=1)

  • 0.018:获取第一行实际花费的时间(毫秒)。
  • 0.019:获取所有行实际花费的时间(毫秒)。
  • rows=1:实际返回的行数。
  • loops=1:该节点执行的次数。

执行时间:计划末尾的 Execution Time 显示了整个查询的实际总耗时。

⚠️ 重要警告

对于 INSERTUPDATEDELETECREATE TABLE AS 等会修改数据的语句,EXPLAIN ANALYZE 会真的执行这些操作!在生产环境中使用前,请务必在测试环境确认,或者将其包裹在一个事务中并回滚:

BEGIN;
EXPLAIN ANALYZE UPDATE table_name SET column = value WHERE condition;
ROLLBACK; -- 分析完成后回滚,不会真正修改数据

3. 如何解读和分析执行计划

查看执行计划的目的是找到性能瓶颈。以下是一些常见的需要关注的性能红灯

全表扫描 (Seq Scan)

  • 对大数据表进行全表扫描通常性能很差。检查是否可以为 WHERE 子句中的条件字段创建索引。

昂贵的操作

  • Sort: 昂贵的排序操作,尤其是在处理大量数据时。考虑是否可以通过索引来避免排序。
  • Hash Join / Hash Aggregate: 这些操作需要在内存中构建哈希表,如果数据量大,可能会占用大量内存甚至使用磁盘临时文件,导致变慢。
  • Nested Loop: 如果内循环的数据集很大,性能会非常差。

总结步骤

  1. 找到慢查询:通过日志查询。
  2. 使用 EXPLAIN ANALYZE:在测试环境中运行它来获取真实的执行计划。
  3. 寻找瓶颈:从上到下阅读执行计划,寻找全表扫描、不准确的预估、昂贵的排序或哈希操作。
  4. 提出优化方案
    • 增加索引(最常用):为 WHEREJOINORDER BYGROUP BY 子句中的字段添加索引。
    • 优化查询:重写查询,避免不必要的操作(如 SELECT *,复杂的子查询)。

到此这篇关于PostgreSQL执行计划的使用与查看教程的文章就介绍到这了,更多相关PostgreSQL执行计划使用与查看内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • PostgreSQL 安装部署及配置使用教程

    PostgreSQL 安装部署及配置使用教程

    PostgreSQL是一个功能强大的开源对象关系型数据库系统,支持 SQL 标准和扩展,适合各种规模应用,本文给大家介绍PostgreSQL 安装部署及配置使用,感兴趣的朋友跟随小编一起看看吧
    2025-11-11
  • PostgreSQL三种自增列sequence,serial,identity的用法区别

    PostgreSQL三种自增列sequence,serial,identity的用法区别

    这篇文章主要介绍了PostgreSQL三种自增列sequence,serial,identity的用法区别,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • PostgreSQL自定义函数的使用

    PostgreSQL自定义函数的使用

    本文主要介绍了PostgreSQL自定义函数的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-06-06
  • 初识PostgreSQL存储过程

    初识PostgreSQL存储过程

    这篇文章主要介绍了初识PostgreSQL存储过程,本文讲解了PostgreSQL中存储过程的语法,并给出了一个操作实例,需要的朋友可以参考下
    2015-01-01
  • postgresql兼容MySQL on update current_timestamp问题

    postgresql兼容MySQL on update current_timestamp

    这篇文章主要介绍了postgresql兼容MySQL on update current_timestamp问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • PostgreSQL进行重置密码的方法小结

    PostgreSQL进行重置密码的方法小结

    今天想测试一个PostgresSQL语法的 SQL,但是打开PostgresSQL之后沉默了,密码是什么?日长月久的,渐渐就忘记了,于是开始了寻找密码的道路,所以本文介绍了Postgresql忘记密码,如何重置密码,需要的朋友可以参考下
    2024-05-05
  • postgresql运维之远程迁移操作

    postgresql运维之远程迁移操作

    这篇文章主要介绍了postgresql运维之远程迁移操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • windows PostgreSQL 9.1 安装详细步骤

    windows PostgreSQL 9.1 安装详细步骤

    这篇文章主要介绍了windows PostgreSQL 9.1 安装详细步骤,需要的朋友可以参考下
    2016-11-11
  • postgresql 中的加密扩展插件pgcrypto用法说明

    postgresql 中的加密扩展插件pgcrypto用法说明

    这篇文章主要介绍了postgresql 中的加密扩展插件pgcrypto用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • 如何使用PostgreSQL进行中文全文检索

    如何使用PostgreSQL进行中文全文检索

    PostgreSQL被称为是“最高级的开源数据库”,它的数据类型非常丰富,用它来解决一些比较偏门的需求非常适合。由于PgSQL国内的资料较少,所有本文将详细介绍此类问题,以便后来的同学能顺利使用PgSQL。
    2021-05-05

最新评论