博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
greenplum 单表 数据扫描
阅读量:5974 次
发布时间:2019-06-19

本文共 2036 字,大约阅读时间需要 6 分钟。

单表查询
1)seq scan 顺序扫描 数据文件从头读到尾,greenplum中压缩表尤为突出
2)index scan:索引扫描,对于查询小数据量而言,速度很快
3)bitmap heap scan:位图堆表扫描,数据在整表占较大的时候
tutorial=> create table pg_class_tmp as select * from pg_class distributed by (relname);
SELECT 468
tutorial=> create index pg_class_tmp_relkind_idx on pg_class_tmp(relkind);
CREATE INDEX
通过参数 enable_seqscan禁止顺序扫描,确保执行计划通过pg_class_tmp_relkind_idx查询数据
tutorial=> set enable_seqscan = off;
SET
tutorial=> explain select * from pg_class_tmp where relkind='c';
                                          QUERY PLAN                                         
----------------------------------------------------------------------------------------------
-
Gather Motion 2:1  (slice1; segments: 2)  (cost=100.28..143.12 rows=3 width=234)
   ->  Bitmap Heap Scan on pg_class_tmp  (cost=100.28..143.12 rows=3 width=234)
         Recheck Cond: relkind = 'c'::"char"
         ->  Bitmap Index Scan on pg_class_tmp_relkind_idx  (cost=0.00..100.28 rows=3 width=0)
               Index Cond: relkind = 'c'::"char"
Settings:  enable_seqscan=off
(6 rows)
/*创建索引时创建的为普通索引,为什么会变成位图索引*/
4)tid scan:隐藏字段ctid扫描(oracle rowid)
ctid是postgresql标记数据位置位置的字段,每个子节点都是一个postgresql数据库,每一个子节点都单独维护自己的一套ctid字段
tutorial=> select ctid from pg_class_tmp limit 1;
ctid 
-------
(0,1)
(1 row)
tutorial=> select relkind from pg_class_tmp where ctid = '(0,1)';
NOTICE:  SELECT uses system-defined column "pg_class_tmp.ctid" without the necessary companion
column "pg_class_tmp.gp_segment_id"HINT:  To uniquely identify a row within a distributed table, use the "gp_segment_id" column t
ogether with the "ctid" column. relkind
---------
t
r
(2 rows)
tutorial=> select relkind from pg_class_tmp where ctid = '(0,1)' and gp_segment_id=1;
relkind
---------
r
(1 row)
tutorial=> select relkind from pg_class_tmp where ctid = '(0,1)' and gp_segment_id=0;
relkind
---------
t
(1 row)
tutorial=>
5) 子查询
只要sql中有子查询,需要对子查询的结果做顺序扫描,就会进行子查询扫描
6) 函数扫描
tutorial=> explain select * from generate_series(1,20);
                               QUERY PLAN                              
------------------------------------------------------------------------
Function Scan on generate_series  (cost=0.00..12.50 rows=2000 width=4)
Settings:  enable_seqscan=off
(2 rows)     

转载地址:http://cmdox.baihongyu.com/

你可能感兴趣的文章
2018-11-26
查看>>
2018 KDD CUP支付宝安全团队Deep X斩获两项大奖
查看>>
安装 PHP7
查看>>
PHPCMS V9静态化HTML生成设置及URL规则优化
查看>>
关闭SQL Server 数据库所有使用连接
查看>>
tkinter events format
查看>>
跨越敏捷 — 闲鱼研发效能升级之路
查看>>
8支团队正在努力构建下一代Ethereum
查看>>
Shell脚本常用命令
查看>>
教程 | pandas轻松入门 之 数据结构介绍 1
查看>>
一篇文章能够看懂基础源代码之JAVA篇
查看>>
什么是大数据技术架构
查看>>
【分享】如何救援記憶卡中誤刪的資料
查看>>
教你回收站里面的东西删除了怎么恢复的技巧
查看>>
4个方面彻底说清JS的深拷贝/浅拷贝
查看>>
北方计算机专修学院“展示自我 秀出风采” 网页创意设计大赛成功举办
查看>>
DNS解析相关实验:7台主机的恩怨情仇
查看>>
Goldengate双向复制配置
查看>>
Oracle官方内部MAA教程
查看>>
DNS相关配置
查看>>