计划分类
explain + 语句 打印语句计划并不实际执行语句
explain analyze + 语句 打印语句计划(实际执行了语句)
explain
finance=# explain select * from client;
QUERY PLAN
-----------------------------------------------------------
Seq Scan on client (cost=0.00..11.30 rows=130 width=598)
(1 row)
Seq Scan :全表扫描
(cost=0.00..11.30 rows=130 width=598)
cost为代价:启动代价为0.00 整表扫描代价为11.30
rows=130:代表会返回130行数据(预估的)
width=598:表示每行平均宽度为598
常用算子解读
---------------------------------------扫描算子
Seq Scan 全表扫描
Index Scan 索引扫描
Bitmap Heap Scan 位图扫描
---------------------------------------条件过滤算子
Filter 从结果集进行过滤的算子
---------------------------------------连接算子
Nestloop Join : 嵌套循环连接 一般适用于外表结果集小内表结果集也小且可以走索引扫描的场景
Hash Join : hash连接,两表关联,小表可以放入内存之中.
Merge Join : hash关联且两表关联条件为有序的.
一些计划干预参数
enable_bitmapscan 是否使用位图扫描
enable_tidscan 是否使用位图扫描
enable_hashagg 是否使用hash聚合
enable_hashjoin 是否使用hash连接
enable_indexonlyscan 是否使用indexonlyscan
enable_indexscan 是否使用索引扫描
enable_material 是否使用物化算子
enable_mergejoin 是否使用mergejoin
enable_nestloop 是否使用nestloop
enable_seqscan 是否使用全表扫描
enable_sort 是否使用sort算子
统计信息
analyze tablename : 手动收集指定表的统计信息,结果保存在pg_statistic中(autovacuum守护进程会自动
收集统计信息,前提autovacuum参数为on)
default_statistics_target : 会话级别设置analyze收集表统计信息的粒度