1.列存储简介
传统的数据库普遍使用行存储,行存储数据压缩率低,读取数据的时候是按行读取的,即使读取一列也必须读取整行。在一个复杂查询中仅仅读取一个宽表的少数列的场景下,行存储以行作为操作单位,会引入大量无关的数据列的读取与缓存,造成了大量IO 的浪费,性能较差。因此openGauss提供了列存储引擎的相关功能,列存储将各个属性维度的数据存在一起,非常适合数据的压缩,并能降低IO次数。在创建表的时候,可以在with语句中指定行存储还是列存储。
2.列存储的优势
(1)高压缩率:列存储引擎针对列的数据特征进行优化,适合对相似数据进行压缩。在数据量较大的场景下,列存储可以节省大量磁盘空间,并提高IO效率。
(2)查询性能优化:当表中列数较多,但实际查询只涉及部分列时,列存储可以按需读取列数据,避免了不必要的IO操作,提高查询性能。
(3)向量化运算:列存储表基于列批量数据向量运算和向量化执行引擎,能够充分利用CPU缓存,提高执行效率。
3.列存储的劣势
(1)列存储表不支持数组。
(2)列存储表的数量建议不超过1000个。
(3)列存储表的表级约束只支持PARTIAL CLUSTER KEY,不支持主外键等表级约束。
(4)列存储表的字段约束只支持NULL、NOT NULL和DEFAULT常量值。
(5)列存储表不支持使用ALTER命令修改字段约束。
4.创建列存储表的语法示例
openGauss 创建普通表默认是未压缩的行存表。
create table t1(id int ,name varchar(20));
复制
创建列存表,需要指定orientation=column,默认压缩级别是low。
create table t2(id int ,name varchar(20)) with (orientation=column , compression=high,compresslevel=3);
复制
在openGauss中有三种压缩级别:LOW, MIDDLE, HIGH。指定的压缩等级越高,则数据的压缩率越高。除此之外还可以选择不开启压缩。
typedef enum OptCompress { COMPRESS_NO = 0, COMPRESS_LOW, COMPRESS_MIDDLE, COMPRESS_HIGH, } OptCompress;
复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
目录