暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

openGauss每日一练第21天 | 学习openGauss存储模型-行存和列存

原创 luooofan 2021-12-24
538

行存储是指将表按行存储到硬盘分区上,列存储是指将表按列存储到硬盘分区上。默认情况下,创建的表为行存储。要创建列存表需要在建表时指定WITH (ORIENTATION = COLUMN);

行、列存储模型各有优劣,通常用于TP场景的数据库,默认使用行存储,仅对执行复杂查询且数据量大的AP场景时,才使用列存储。

列存有利于压缩。

-- 1. -- 注意如果只创一个单字段的表则无明显的比较的意义 -- 所以要创多个字段的表 create table row_tb (id int, num number); \d+ row_tb; create table column_tb (id int, num number) with (orientation = column); \d+ column_tb; insert into row_tb select generate_series(1, 100000), (random() *(10^4))::int; insert into column_tb select * from row_tb; -- 2. \d+ -- 对比非常明显 差距近7倍 -- row_db 占用了 4360 kB -- column_db 占用了 632 kB 采用了 low 级别的压缩 -- 3. analyze verbose row_tb; analyze verbose column_tb; explain analyze select id from row_tb; -- Total runtime: 31.826 ms explain analyze select id from column_tb; -- Total runtime: 15.362 ms -- 列存显然更快 explain analyze select * from row_tb; -- Total runtime: 26.729 ms explain analyze select * from column_tb; -- Total runtime: 17.666 ms -- 这种情况下也是列存更快,但并不具有普遍意义 explain analyze insert into row_tb values(0, '0'); -- Total runtime: 0.164 ms explain analyze insert into column_tb values(0, '0'); -- Total runtime: 4.277 ms -- 行存显然更快 -- 4. drop table row_tb; drop table column_tb;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论