请选择 进入手机版 | 继续访问电脑版

PostgreSQL EXPLAIN

[复制链接]
滚雪球少年 发表于 2020-12-31 18:57:07 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
本文学习如何使用PostgreSQL EXPLAIN语句分析SQL执行筹划。
1. PostgreSQL EXPLAIN语句

EXPLAIN语句返回给定SQL语句的PostgreSQL分析引擎生成的执行筹划。展示语句中涉及的表如何被索引扫描或顺序扫描等,如果使用多个表,应用哪种join算法。
EXPLAIN 语句返回最重要的、有用的信息是返回第一行之前的起始成本和返回完整效果集的总成本。
下面是EXPLAIN 语法:
  1. EXPLAIN [ ( option [, ...] ) ] sql_statement;
复制代码
此中option 可以是下面内容:
  1. ANALYZE [ boolean ]VERBOSE [ boolean ]COSTS [ boolean ]BUFFERS [ boolean ]TIMING [ boolean ]  SUMMARY [ boolean ]FORMAT { TEXT | XML | JSON | YAML }
复制代码
boolean 表现选项开关。可以使用 TRUE, ON, 或1 启用选项, FALSE, OFF, 或0 禁用选项. 如果忽略boolean选项,缺省为启用。


  • ANALYZE
ANALYZE 选项首先执行sql语句,然后返回实际运行时间统计信息。此中包罗每个集合节点总耗时及实际返回行数。
ANALYZE 语句实际执行SQL语句并抛弃输出信息,因此如果想分析INSERT, UPDATE, 或 DELETE且不影响数据,应该在事务中包裹EXPLAIN ANALYZE:
  1. BEGIN;    EXPLAIN ANALYZE sql_statement;ROLLBACK;
复制代码


  • VERBOSE
VERBOSE 参数可以显示执行集合更多信息,默认为false。


  • COSTS
COSTS 选项包罗每个筹划节点的估计启动成本和总成本,以及查询筹划中的估计行数和估计行的宽度。默认为TRUE。


  • BUFFERS
该参数增加信息至buffer。BUFFERS 参数仅当ANALYZE 启用时才气使用。缺省为FALSE。


  • TIMING
该参数包罗实际启动时间及每个节点耗费时间。TIMING 缺省为TRUE,仅当ANALYZE 启用时才气使用。


  • SUMMARY
SUMMARY 参数在查询筹划之后摘要信息(如总耗时)。当ANALYZE 启用时,缺省包罗摘要信息。


  • FORMAT
指定查询筹划输特别式,如TEXT, XML, JSON, YAML。缺省为TEXT。
2. PostgreSQL EXPLAIN 示例

下面语句展示简单查询film表的执行筹划:
  1. EXPLAIN SELECT * FROM film;
复制代码
输出如下:

下面示例展示查询特定film_id的执行筹划:
  1. EXPLAIN SELECT * FROM film WHERE film_id = 100;
复制代码
输出如下:

因为film_id是索引,语句返回执行筹划不一样。输出中筹划使用索引扫描取代对film表的顺序扫描。
如果不需要显示成本,可以使用COSTS 选项:
  1. EXPLAIN (COSTS FALSE) SELECT    *FROM    filmWHERE    film_id = 100;
复制代码

下面示例显示使用聚集函数查询的执行筹划:
  1. EXPLAIN SELECT COUNT(*) FROM film;
复制代码
输出如下:

下面示例返回多个表关联查询的执行筹划:
  1. EXPLAINSELECT    f.film_id,    title,    name category_nameFROM    film f    INNER JOIN film_category fc         ON fc.film_id = f.film_id    INNER JOIN category c         ON c.category_id = fc.category_idORDER BY    title;
复制代码
输出如下:

需要在输出中增加运行时间统计,需要使用ANALYZE选项:
  1. EXPLAIN ANALYZE    SELECT        f.film_id,        title,        name category_name    FROM        film f        INNER JOIN film_category fc             ON fc.film_id = f.film_id        INNER JOIN category c             ON c.category_id = fc.category_id    ORDER BY        title;
复制代码
输出如下:

3. 总结

本文学习了如何使用PostgreSQL EXPLAIN展示sql语句的执行筹划。

来源:https://blog.csdn.net/neweastsun/article/details/111940792
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题

专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )