获取执行计划的方式是由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中命中的个数,以及执行的时间,这个时间是真实的
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中命中的个数,以及执行的时间,这个时间是真实的