greenplum 单表 数据扫描

简介: 单表查询 1)seq scan 顺序扫描 数据文件从头读到尾,greenplum中压缩表尤为突出 2)index scan:索引扫描,对于查询小数据量而言,速度很快 3)bitmap hea...
单表查询

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)     
目录
相关文章
|
6月前
|
SQL Oracle 关系型数据库
MySQL单表千万级数据查询优化大家怎么说(评论有亮点)
单表千万级数据是MySQL查询的一个坎,可能还不是天花板。“一个人走的慢,一群人走的快”,通过讨论可以发现MySQL千万数据的全貌大概是怎样的。
241 0
|
8月前
|
SQL 关系型数据库 PostgreSQL
|
存储 运维 容灾
使用NineData实现亿级别MySQL大表迁移
NineData提供了高效、稳定的MySQL大表迁移能力,解决了传统迁移方案的问题。通过智能分片、行级并发和动态攒批等核心技术,NineData保证了迁移性能。同时,NineData具备完善的容灾能力,提高了大表迁移的成功率。通过数据和结构的对比功能,保障了数据的一致性。使用NineData进行迁移任务的配置简单快捷,只需一分钟即可完成。NineData还提供了丰富的检查项和观测、干预能力,帮助用户追踪迁移进展并处理异常情况。
894 0
使用NineData实现亿级别MySQL大表迁移
|
关系型数据库
GreenPlum和openGauss进行简单聚合时对扫描列的区别
GreenPlum和openGauss进行简单聚合时对扫描列的区别
149 0
|
SQL 关系型数据库 MySQL
Mysql数据量统计:一条sql查询所有表的数据量、数据大小、索引大小
Mysql数据量统计:一条sql查询所有表的数据量、数据大小、索引大小
259 0
|
SQL 存储 关系型数据库
一条SQL查询出MySQL数据库中所有表的数据量大小
一条SQL查询出MySQL数据库中所有表的数据量大小
1278 0
|
关系型数据库 MySQL 数据库
MySQL数据库之单表记录查询
MySQL数据库之单表记录查询
260 0
MySQL数据库之单表记录查询
|
SQL 关系型数据库 MySQL
PolarDB-X 1.0-SQL 手册-Hint-扫描全部/部分分库分表
本文适用于PolarDB-X 5.3 及以上版本,其他版本请参见PolarDB-X 5.2 HINT。
299 1
|
存储 关系型数据库 MySQL
mysql多库表关联问题症结
0、题记 项目中使用mysql作为数据存储,需要定期将库表中的数据按照给定格式生成报表。根据导出周期的不同分为:日报、周报、月报、季报、年报等格式。
140 0

热门文章

最新文章