Postgresql 查看SQL语句执行效率的操作_PostgreSQL

来源:脚本之家  责任编辑:小易  

Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看 SQL 语句的执行效 果,可以帮助选择更好的索引和优化查询语句,写出更好的优化语句。

Explain语法:

explain select … from … [where ...]

例如:

explain select * from dual;

这里有一个简单的例子,如下:

EXPLAIN SELECT * FROM tenk1;
               QUERY PLAN
----------------------------------------------------------------
   Seq Scan on tenk1 (cost=0.00..458.00 rows=10000 width=244)

EXPLAIN引用的数据是:

1). 预计的启动开销(在输出扫描开始之前消耗的时间,比如在一个排序节点里做排续的时间)。

2). 预计的总开销。

3). 预计的该规划节点输出的行数。

4). 预计的该规划节点的行平均宽度(单位:字节)。

这里开销(cost)的计算单位是磁盘页面的存取数量,如1.0将表示一次顺序的磁盘页面读取。其中上层节点的开销将包括其所有子节点的开销。这里的输出行数(rows)并不是规划节点处理/扫描的行数,通常会更少一些。一般而言,顶层的行预计数量会更接近于查询实际返回的行数。

现在我们执行下面基于系统表的查询:

SELECT relpages, reltuples FROM pg_class WHERE relname = 'tenk1';

从查询结果中可以看出tenk1表占有358个磁盘页面和10000条记录,然而为了计算cost的值,我们仍然需要知道另外一个系统参数值。

postgres=# show cpu_tuple_cost;
   cpu_tuple_cost
  ----------------
   0.01
  (1 row)
cost = 458(磁盘页面数) + 10000(行数) * 0.01(cpu_tuple_cost系统参数值

补充:postgresql SQL COUNT(DISTNCT FIELD) 优化

背景

统计某时段关键词的所有总数,也包含null (statistics 有400w+的数据,表大小为 600M),故

写出sql:

select count(distinct keyword) +1 as count from statistics;

问题

虽然是后台查询,但是太慢了,执行时间为为 38.6s,那怎么优化呢?

解决

方法1(治标)

把这个定时执行,然后把sql结果缓存下,然后程序访问缓存结果,页面访问是快了些,但是本质上还没有解决sql执行慢的问题。

方法2(治本)

优化sql,首先说说 count( distinct FIELD) 为啥这么慢,此处不再赘述了,请看这篇:https://www.zgxue.com/article/65680.htm

优化内容:

select count( distinct FIELD ) from table

修改为

select count(1) from (select distinct FIELD from table) as foo;

比较

执行过程比对,可以使用 explian anaylze sql语句 查看

以上为个人经验,希望能给大家一个参考,也希望大家多多支持真格学网。如有错误或未考虑完全的地方,望不吝赐教。

您可能感兴趣的文章:PostgreSQL对GROUP BY子句使用常量的特殊限制详解PostgreSQL中的VACUUM命令用法说明PostgreSQL 如何查找需要收集的vacuum 表信息PostgreSQL备份工具 pgBackRest使用详解postgresql数据合并,多条数据合并成1条的操作postgresql数据添加两个字段联合唯一的操作postgreSQL使用pgAdmin备份服务器数据的方法

  • 本文相关:
  • postgresql中的case用法说明
  • 浅谈postgresql 11 新特性之默认分区
  • 关于postgresql 行排序的实例解析
  • postgresql 判断字符串中是否有中文的案例
  • postgresql树形结构的递归查询示例
  • postgresql 实现子查询返回多行的案例
  • windows下postgresql安装图解
  • postgresql的b-tree索引用法详解
  • postgresql 实现sql多行语句合并一行
  • visual studio code(vs code)查询postgresql拓展安装教程图解
  • 如何查看PostgreSQL执行效率低的SQL
  • 如何查询postgresql 执行过的sql语句
  • 如何查看PostgreSQL正在执行的SQL
  • SQL语句优化,使用postgresql数据库,查询下面sql,...
  • postgresql 怎么查某事务正执行的SQL语句
  • postgresql的sql语句怎样执行,使用什么内置函数?
  • 如何测试很多个用户同时查询postgresql数据库时的效率
  • 在shell里面可以执行postgresql数据库的sql语句吗
  • 如何查看PostgreSQL执行效率低的SQL
  • 为什么这个SQL语句在postgresql没有效果
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess数据库文摘数据库其它首页postgresqlpostgresql对group by子句使用常量的特殊限制详解postgresql中的vacuum命令用法说明postgresql 如何查找需要收集的vacuum 表信息postgresql备份工具 pgbackrest使用详解postgresql数据合并,多条数据合并成1条的操作postgresql数据添加两个字段联合唯一的操作postgresql使用pgadmin备份服务器数据的方法postgresql中的case用法说明浅谈postgresql 11 新特性之默认分区关于postgresql 行排序的实例解析postgresql 判断字符串中是否有中文的案例postgresql树形结构的递归查询示例postgresql 实现子查询返回多行的案例windows下postgresql安装图解postgresql的b-tree索引用法详解postgresql 实现sql多行语句合并一行visual studio code(vs code)查询postgresql拓展安装教程图解postgresql 角色与用户管理介绍windows下postgresql数据库的下载windows下postgresql安装图解postgresql中的oid和xid 说明15个postgresql数据库实用命令分postgresql alter语句常用操作小windows postgresql 安装图文教程postgresql 安装和简单使用postgresql 创建表分区postgresql新手入门教程mac os上安装postgresql的教程postgresql 远程连接配置操作本地计算机上的 postgresql 服务启动后停postgresql教程(十六):系统视图详解postgresql时间线(timeline)和history fipostgresql 实现字符串分割字段转列表查询postgresql 非count方法算记录数操作postgresql list、range 表分区的实现方案postgresql pg_archivecleanup与清理archpostgresql 查询集合结果用逗号分隔返回字
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved