永久了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 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!