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 执行计划的输出文件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值