• 售前

  • 售后

热门帖子
入门百科

Postgresql 查看SQL语句实行服从的操作

[复制链接]
我心如烟卸 显示全部楼层 发表于 2021-8-14 15:34:09 |阅读模式 打印 上一主题 下一主题
Explain下令在办理数据库性能上是第一保举利用下令,大部门的性能问题可以通过此下令来简单的办理,Explain可以用来查看 SQL 语句的实验效 果,可以资助选择更好的索引和优化查询语句,写出更好的优化语句。
Explain语法:
  1. explain select … from … [where ...]
复制代码
例如:
  1. explain select * from dual;
复制代码
这里有一个简单的例子,如下:
  1. EXPLAIN SELECT * FROM tenk1;
  2.                QUERY PLAN
  3. ----------------------------------------------------------------
  4.    Seq Scan on tenk1 (cost=0.00..458.00 rows=10000 width=244)
复制代码
EXPLAIN引用的数据是:

1). 预计的启动开销(在输出扫描开始之前消耗的时间,比如在一个排序节点里做排续的时间)。
2). 预计的总开销。
3). 预计的该规划节点输出的行数。
4). 预计的该规划节点的行均匀宽度(单位:字节)。
这里开销(cost)的计算单位是磁盘页面的存取数目,如1.0将表现一次顺序的磁盘页面读取。此中上层节点的开销将包罗其所有子节点的开销。这里的输出行数(rows)并不是规划节点处理/扫描的行数,通常会更少一些。一样寻常而言,顶层的行预计数目会更靠近于查询实际返回的行数。
现在我们实验下面基于系统表的查询:
  1. SELECT relpages, reltuples FROM pg_class WHERE relname = 'tenk1';
复制代码
从查询效果中可以看出tenk1表占据358个磁盘页面和10000条记录,然而为了计算cost的值,我们仍旧需要知道别的一个系统参数值。
  1. postgres=# show cpu_tuple_cost;
  2.    cpu_tuple_cost
  3.   ----------------
  4.    0.01
  5.   (1 row)
  6. cost = 458(磁盘页面数) + 10000(行数) * 0.01(cpu_tuple_cost系统参数值
复制代码
增补:postgresql SQL COUNT(DISTNCT FIELD) 优化
配景

统计某时段关键词的所有总数,也包罗null (statistics 有400w+的数据,表巨细为 600M),故
写出sql:
  1. select count(distinct keyword) +1 as count from statistics;
复制代码
问题

虽然是配景查询,但是太慢了,实验时间为为 38.6s,那怎么优化呢?
办理

方法1(治标)

把这个定时实验,然后把sql效果缓存下,然后步伐访问缓存效果,页面访问是快了些,但是本质上还没有办理sql实验慢的问题。
方法2(治本)

优化sql,首先说说 count( distinct FIELD) 为啥这么慢,此处不再赘述了,请看这篇:https://www.jb51.net/article/65680.htm
优化内容:
  1. select count( distinct FIELD ) from table
复制代码
修改为
  1. select count(1) from (select distinct FIELD from table) as foo;
复制代码
比力

实验过程比对,可以利用 explian anaylze sql语句 查看
以上为个人履历,盼望能给大家一个参考,也盼望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作