explain
explain用于查询一个表的执行计划,它在SQL优化的时候经常要用到(详细的执行计划解释参考第五章执行计划详解)
1.下面代码演示了简单的执行计划的查看方法:
上面的执行计划是一个层次关系,先从最右边开始查看:
- 数据库先顺序扫描test2表,扫描大概有118单位的消耗,有1667行数据,平均长度为15字节。其中,1667行数据是一个估计值,是一个Segment的数据量,如果数据分布均匀,大概是总数据量除以Segment的个数。由于这个gp集群有6个Segment节点,因此可以推断test2表大概有1万行数据
- 扫描出test2表,并且计算hash值,将其保存在内存中
- 顺序扫描test1表
- 在扫描test1表的过程中,与test2表进行hash后的结果关联(hash join),关联的条件是两表的id字段相同
- 将数据汇总到Master上。Master将数据结果进行汇总并展现
2.EXPLAIN analyze (SELECT * from person where id>100 and age>1000 LIMIT 100) UNION ALL
(SELECT * from person where id>1000 and age>5000 LIMIT 200)
ctual time=中的第一个数字表示返回第一行需要的时间(叫启动时间),第二个数字表示执行这个整个花的时间(从最后行到当前行一共花费的时间)。后面的rows=300000是实际的行数。
3. explain select * from t;
QUERY PLAN
———————————————————-
Seq Scan on t (cost=0.00 ..4621.00 rows=300000 width=10 )
(1 row)
cost=说明:
第一个数字0.00表示启动cost,这是执行到返回第一行时需要的cost值。
第二个数字4621.00表示执行整个SQL的cost