GaussDB A支持行列混合存储。行、列存储模型各有优劣,建议根据实际情况选择。
行存储是指将表按行存储到硬盘分区上,列存储是指将表按列存储到硬盘分区上。默认情况下,创建的表为行存储。
一.行存储和列存储的差异:
行存
优点:
数据被保存在一起。INSERT/UPDATE容易。
缺点
选择(Selection)时即使只涉及某几列,所有数据也都会被读取。
列存
优点:
•查询时只有涉及到的列会被读取。
•投影(Projection)很高效。
•任何列都能作为索引。
缺点:
•选择完成时,被选择的列要重新组装。
•INSERT/UPDATE比较麻烦。
CREATE TABLE ypg_t1
(
t_id varchar,
t_name varchar
);
CREATE TABLE ypg_t2
(
t_id varchar,
t_name varchar
)WITH (ORIENTATION = COLUMN);
二.查询某个属主下所有的列存表
1.没有找到系统表或视图有保存行存,列存信息的(略)
2.通过shell脚本批量查询对应的建表语句,orientation=column 过滤列存表(脚本略)
SELECT pg_catalog.pg_get_tabledef(‘test.ypg_t1’);
SET search_path = test;
CREATE TABLE ypg_t1 (
t_id character varying,
t_name character varying
)
WITH (orientation=row, compression=no)
DISTRIBUTE BY HASH(t_id)
TO GROUP group_version1;
SELECT pg_catalog.pg_get_tabledef(‘test.ypg_t2’);
SET search_path = test;
CREATE TABLE ypg_t2 (
t_id character varying,
t_name character varying
)
WITH (orientation=column, compression=low, colversion=2.0, enable_delta=false)
DISTRIBUTE BY HASH(t_id)
TO GROUP group_version1;
三.如何改列存为行存
不能直接把列存改为行存,需要删表重建
create table ypg_t22 as select * from ypg_t2;
insert into ypg_t222 select * from ypg_t2;