greenplum中heep表和AO表的基本概念和使用
greenplum中heep表和AO表的基本概念和使用
目录
Greenplum 里真正存数据只有两种物理格式:Heap(堆表) 和 AO(Append-Optimized,追加优化表,含行存 AO 与列存 AOCO)。下面用“一句话定义 + 一张对比表”把它们的核心概念、适用场景与优劣彻底分清。
一、基本概念
Heap 表
就是 PostgreSQL 原生的“堆”存储:数据行按插入顺序攒成页,UPDATE/DELETE 在原位置打标记,MVCC 旧版本留在原地,VACUUM 后期清理。
AO 表(Append-Optimized)
- Greenplum 专属格式:只追加、不原地改。
- orientation=row → AO 行存
- orientation=column → AOCO 列存
更新时把原行标记为“已删除”,新行追加到文件尾部;旧空间靠后台 VACUUM 压缩回收。
二、优劣速查表
| 维度 | Heap | AO(行存) | AOCO(列存) |
|---|---|---|---|
| 存储方式 | 堆页,原地更新 | 追加写行块 | 追加写列块 |
| 更新/删除 | 原生 MVCC,速度最快 | 标记删除+追加,性能下降 | 同左 |
| 单行 insert | 快 | 慢(块级追加) | 最慢 |
| 批量加载 COPY | 中等 | 最快(直接写块) | 最快 |
| 压缩 | 无 | 3-8× 节省 | 5-15× 节省 |
| 磁盘占用 | 高 | 低 | 最低 |
| 索引支持 | 所有(B-tree/GiST/GIN/Hash) | 仅 B-tree/Bitmap | 仅 B-tree/Bitmap |
| 查询场景 | 高并发小 SQL、频繁更新 | 批量追加、大表扫描 | 宽表分析、只读报表 |
| 典型表 | 临时表、维表、日志表 | 事实表(行级) | 事实表(列级) |
三、总结
- 1.小表、高并发、频繁更新 → Heap
- 2.TB 级追加、批量 ETL、行级查询 → AO 行存
- 3.宽表、列过滤多、要省盘、只读报表 → AOCO 列存
四、查看和创建
快速查看当前集群里哪些是 Heap / AO / AOCO
SELECT n.nspname,
c.relname,
CASE c.relstorage
WHEN 'h' THEN 'heap'
WHEN 'a' THEN 'ao'
WHEN 'c' THEN 'aoco'
END AS storage_type,
pg_size_pretty(pg_relation_size(c.oid)) AS size
FROM pg_class c
JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind = 'r'
AND n.nspname !~ '^pg_'
ORDER BY 3, 4 DESC;
结果示例
schema | tablename | storage_type | size
--------+---------------+--------------+--------
sales | fact_order | ao | 120 GB
sales | fact_detail | aoco | 85 GB
public | tmp_log | heap | 12 MB
创建语法(3 选 1)
1.Heap 表(默认,不写也行)
CREATE TABLE heap_demo (
id int PRIMARY KEY,
val text
) DISTRIBUTED BY (id); -- or DISTRIBUTED RANDOMLY
2.AO 行存 + 压缩
CREATE TABLE ao_row_demo (
id bigint,
data text
) WITH (appendonly=true, -- 打开 AO
compresstype=zstd,
compresslevel=3,
orientation=row) -- 行存(默认)
DISTRIBUTED BY (id);
3.AOCO 列存 + 分区 + 压缩
CREATE TABLE aoco_demo (
dt date,
prod_id int,
amt numeric(18,2)
) WITH (appendonly=true,
orientation=column, -- 列存
compresstype=zstd,
compresslevel=9)
DISTRIBUTED BY (prod_id)
PARTITION BY RANGE (dt)
( START ('2025-01-01') INCLUSIVE
END ('2026-01-01') EXCLUSIVE
EVERY (INTERVAL '1 month') );

浙公网安备 33010602011771号