您的位置:首页 > 数据库

PostgreSql的执行计划1--获取执行计划

2015-05-28 11:10 204 查看
获取执行计划的方式是由Explain关键字来执行的,Explain的用法是:

EXPLAIN [ ( option [, ...] ) ] statement

其中option是值可以包含:

analyze,timing,verbose,buffers,format

option的含义:其中analyze 为true时,是实际执行了statement,所以在执行update,delete等语句时使用analyze需要小心,最好是包含在一个事务中,如:

begin;

explain analyze statement;

--可以rollback,也可以commit

End;

timing的含义:显示执行的时间,在添加这个选项时必须analyze是true;

verbose的含义:输出的字段显示;

buffers的含义:显示有多少数据是能在共享缓存中获取;

format的含义:设置输出的执行计划的格式;

示例1:

explain select * from mytest9;

QUERY PLAN

---------------------------------------------------------

"Seq Scan on mytest9 (cost=0.00..184.00 rows=10000 width=34)"

不带任何option的执行计划显示。

示例2:

explain analyze select * from mytest9;

QUERY PLAN

---------------------------------------------------------

"Seq Scan on mytest9 (cost=0.00..184.00 rows=10000 width=34) (actual time=0.022..2.195 rows=10000 loops=1)"

"Total runtime: 2.884 ms"

使用了analyze后会显示一些运行时的参数。

示例3:

explain (analyze true,timing,verbose,buffers,format json) select * from mytest9;

QUERY PLAN

---------------------------------------------------------

"[

{

"Plan": {

"Node Type": "Seq Scan",

"Relation Name": "mytest9",

"Schema": "public",

"Alias": "mytest9",

"Startup Cost": 0.00,

"Total Cost": 184.00,

"Plan Rows": 10000,

"Plan Width": 34,

"Actual (...)"

显示的是JSON格式的执行计划。

示例4:

explain (analyze true,timing,verbose,buffers,format text) select * from mytest9;

QUERY PLAN

---------------------------------------------------------

"Seq Scan on public.mytest9 (cost=0.00..184.00 rows=10000 width=34) (actual time=0.018..2.516 rows=10000 loops=1)"

" Output: id, name_1, name_2, name_3"

" Buffers: shared hit=84"

"Total runtime: 3.497 ms"

format参数改为text时,展现了输出的字段,share buffers中命中的个数,以及执行的时间,这个时间是真实的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: