专栏首页AustinDatabasesPostgreSql 复杂的查询,我可怎么分析 (神奇的web site)

PostgreSql 复杂的查询,我可怎么分析 (神奇的web site)

永久了MYSQL 可能会忘记什么是复杂的查询,每种数据库有自己的特点,POSTGRESQL 是一个 OLAP + OLTP 兼得的数据库,所以postgresql 会面对复杂的查询,而复杂的查询怎么来看,分析这就是面临的问题。

我们以下面的例子来看看怎么分析

with data_s as (

select cj.customer_id,cij.city_id,sum(pj.amount) as all_amount

from customer as cj

inner join payment as pj on pj.customer_id = cj.customer_id

inner join address as aj on aj.address_id = cj.address_id

inner join city as cij on cij.city_id = aj.city_id

group by cj.customer_id,pj.amount,cij.city_id

limit 50)

select cus.first_name || ' ' || cus.last_name as full_name,cw.all_amount

from customer as cus

inner join data_s as cw on cw.customer_id = cus.customer_id

与大部分数据库一致的查阅执行计划的方式,我们从缩进最里面的开始

首先

seq scan on public.customer.cj 说明是要全表扫描这个表,启动成本是 0 cost-0.00 这个节点的成本是14.99 评估出需要扫描的夯实 599行,行的列数是6 ,实际上执行总,启动成本是0.021 节点的成本是10.931

其实POSTGRESQL 展示的执行计划以及成本是很详细和好看的,但随着语句的复杂度,则展现的整体执行计划看上去就没有那么方便了。这就是今天要说的,怎么嫩更方便的看。

实际上 PG 官方的pgadmin,可以很好的将要执行的语句变成图形化的方式来展示执行的计划,看到下面的图,用SQL SERVER 的小伙伴可能会比较熟悉,虽然么有SQL SERVER 的图形化 SSMS 的功能多,但分析来说已经很不错了。配合非界面化的文字来协同分析,可以达到比较好的结果。

当然这样看估计还是有很多人不会太满意,那下面在看看这样的方式能否帮助你

可以想象,看到上面的图,有人已经觉得有点意思,想继续了解一下。首先上面的图是将你的执行计划,上传到某个网站得到的效果。

他可以将你的执行结合变为更适合的分析的方式,展示,并且会给你一个汇总,尤其当得到一个几十行,甚至上百行的执行计划的时候,这样的汇总和展示的方式,可能会让焦躁的你,稍微的冷却一下。

下面汇总的图,可以让我们大致迅速了解我们的表有几个seq scan 时间是多少,扫描了表的百分之多少。我想如果这个结果还不能让你满意的话...

那就的祭出最终的神器,可以看到上面的页面,通过这个页面可以将整体预计执行的顺序,以及其中那段是哪个预计行程的,给你一个直观的反映。

有了以上的工具,其实可以应付大多数的比较困难的复杂的语句。

下面是这两个能将explain的执行计划进行详细解释的网站。

https://explain.depesz.com/

http://tatiyants.com/pev/#/plans/new

其中第二个网站,需要将explain 输出为 Json的格式,配合语句,进行展示及具体如何获得 json 的方式的。

1 通过 explain (format josn)的方式来获得 JSON 的执行计划

2 通过psql -qAtd 数据库 -f 执行语句 > 文件

的方式来获得 json 执行计划的输出文件

本文分享自微信公众号 - AustinDatabases(AustinDatabases),作者:carol11

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MYSQL 中的查询技巧 与 MYSQL 8 并行查询

    最近公司的系统一点点的开始了拆分,从ORACLE 转移到 MYSQL 中,部分程序员的想法在使用MYSQL中还是没有转变过来,直接将ORALCE中的查询语句直接...

    AustinDatabases
  • MYSQL JSON 初步体验

    Json 作为程序员最受欢迎的数据格式,使用的越来越广泛了,如果你目前使用的数据库不支持JSON的格式,那显然是满足不了程序员以及 程序微服化的需求以及消息传递...

    AustinDatabases
  • PostgresQL MVCC 机理与 还得学习

    昨天写了些 MYSQL MVCC ,今天就的搞搞 PostgresQL 的MVCC ,最近从某些网站上获得的信息,PostgresQL的 相关人员的需求量在国内...

    AustinDatabases
  • 我一直很喜欢写程序,你呢?

    我是1999年上大学的时候才接触计算机,那时候上网还叫“冲浪”。第一次去学校的机房,视觉、身心被震撼到,深信计算机的未来很美好,于是基本来放弃了本专业(电气工程...

    崔文远TroyCui
  • 供地越多的地方,房价越涨吗?

    因此,我们经常会看到研究者们动不动就祭出一张全国地图,给每个城市进行评级,充满了指点江山的气魄。比如下图(来源:网络):

    华章科技
  • 为什么有人说 Redis 的 set 命令是一个危险命令?

    原文链接:https://redislabs.com/

    业余草
  • Windows必备 | 微软常用运行库 最新版。

    日常生活中很多软件是使用 Microsoft Visual Studio 编写的,这类软件的运行是离不开微软系统运行库的,比如像 QQ、迅雷、Adobe 软件等...

    课代表
  • 金黄葡萄球菌RNA-seq数据分析

    这里出现问题了,突变株的比对率太低,不到1%,这是不可能的,怀疑样品污染,然后随机挑选了5条序列blast了下,发现应该是被溶血葡萄球菌污染。

    Y大宽
  • PHP面向对象核心(二)——继承、多态、接口

    PHP面向对象核心(二) (原创内容,转载请注明来源,谢谢) 三、继承与多态 3.1 继承 1、继承是类级别的复用,关键词为extends;多态是方法级别的复用...

    用户1327360
  • 观点 | 千名学者抵制Nature机器学习子刊:付费期刊为何不是AI研究的未来

    机器之心

扫码关注云+社区

领取腾讯云代金券