使用EXPLAIN (postgresql) 对sql进行优化

现在sql优化有两种方向,一种是通过增加缓存的方式,比如通过使用redis , mybites 一二级缓存来提高查询效率。 第二种是通过使用explain来分析慢查询的sql语句, 找到该语句的问题从而进行优化。

这里对使用explain来进行优化的方式做一些介绍。

使用方式:  explain +  sql => 执行 =>  查看结果

使用explain会打印出来数据库引擎在底层执行sql语句是具体是怎么做的。

举个例子:

使用explain对这条sql语句进行具体的分析。

explain (ANALYZE on ,TIMING on, VERBOSE on, BUFFERS on, COSTS on )select data_date from e_mp_energy_month where data_date between to_date('2021-02','yyyy-mm-dd') and to_date('2021-02','yyyy-mm-dd') and meter_id in ( 20122700000146 , 20122700000147 , 20122700000148 , 20122700000149 , 20122700000150 , 20122700000151 , 20122700000152 , 20122700000153 , 20122700000154 , 20122700000155 , 20122700000156 , 20122700000157 , 20122700000158 , 20122700000159 , 20122700000160 , 20122700000161 , 20122700000162 , 20122700000163 , 20122700000164 ) order by meter_id,data_date asc

在显示的结果中, cost表示对启动成本和总成本的预估。 cost后面第一个数字代表启动成本(查询到第一行所需要的成本), 第二个数字表示查询结束所需要的成本。

Seq Scan表示这条sql的执行方式时  顺序扫描表。

actual time 表示实际的执行时间(单位毫秒)

buffers  -> shared hit 表示在内存中读到了多少块。

filter表示过滤条件。

需要注意的一点是 , 使用了ANALYZE字段的explain, 是真正会执行的 ,修改不可逆。 不使用ANALYZE的explain,只是预执行,不会改变数据库中实际数据。

使用ANALYZE可以获得数据库实际执行时间, 但是修改不可逆, 要想结果可逆, 需要手动rollback。

个人认为,优化后sql, cost的值越小越好 , buffers shared hit的值越高越好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值