openGauss支持行列混合存储。行存储是指将表按行存储到硬盘分区上,列存储是指将表按列存储到硬盘分区上。
行、列存储模型各有优劣,建议根据实际情况选择。通常openGauss用于OLTP(联机事务处理)场景的数据库,默认使用行存储,仅对执行复杂查询且数据量大的OLAP(联机分析处理)场景时,才使用列存储。默认情况下,创建的表为行存储。行存储和列存储的差异请参见图1。
图 1 行存储和列存储的差异

上图中,左上为行存表,右上为行存表在硬盘上的存储方式。左下为列存表,右下为列存表在硬盘上的存储方式。
行、列存储有如下优缺点:
存储模型
|
优点
|
缺点
|
行存
|
数据被保存在一起。INSERT/UPDATE容易。
|
选择(SELECT)时即使只涉及某几列,所有数据也都会被读取。
|
列存
|
- 查询时只有涉及到的列会被读取。
- 投影(Projection)很高效。
- 任何列都能作为索引。
|
- 选择完成时,被选择的列要重新组装。
- INSERT/UPDATE比较麻烦。
|
一般情况下,如果表的字段比较多(大宽表),查询中涉及到的列不多的情况下,适合列存储。如果表的字段个数比较少,查询大部分字段,那么选择行存储比较好。
存储类型
|
适用场景
|
行存
|
- 点查询(返回记录少,基于索引的简单查询)。
- 增、删、改操作较多的场景。
- 频繁的更新、少量的插入。
|
列存
|
- 统计分析类查询 (关联、分组操作较多的场景)。
- 即席查询(查询条件不确定,行存表扫描难以使用索引)。
- 一次性大批量插入。
- 表列数较多,建议使用列存表。
- 如果每次查询时,只涉及了表的少数(
相关推荐
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。 GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。 作者:叶金荣 文章来源:社区原创 可能会执行非常慢,线上生产环境千万别写出这种SQL ... 背景交代 用 tpcc-mysql 工具生成 50个仓库 的测试数据,表 order_line 共有 37970973 条记录。 某工具在运行过程中,会产生下
Redis是一种快速内存密集型的开源 NoSQL 数据库,它具有存储数据非常快速和简便的优点,在某些领域里很有优势,特别是在缓存和几乎可以实时返回数据的能力上。Redis因其高性能而受欢迎,因此很多数据库和软件都使用它作为支持。 在进行向Redis存储数据之前,首先我们需要安装Redis服务器,可以通过安装Redis压缩包来安装,也可以直接使用一个可用的云服务,比如Amazon ElastiCac
风一样自由 [openGauss](javascript:void(0)😉 2023-07-29 17:58 发表于四川 一.环境准备 已搭建openGauss一主两备集群(企业版5.0),环境如下: 主机IP 主机名 节点类型 10.100.10.92 yf1 主节点 10.100.10.93 yf2 备节点 10.100.10.94 yf3 备节点 二.gs_dropnode删除集群备节点 拟
1、Oracle 1.1、多表查询 1) 多表查询的基本语法 前面的查询都是针对一张表的操作,如果在查询的时候涉及到多张表,那么就称为多表查询,夺标查询的语法如下: select *|具体的列名 from 表名称1,表名称2 where 条件表达式 order by 排序字段 asc|desc; 下面看一个例子,对emp表和dept表进行查询 select * from emp,dept; 如此多
在一些实时性较强的业务场景中,我们可能需要将一些数据置底,例如广告、推荐等。在MySQL数据库中,实现数据置底有多种方式,以下介绍两种基础方法: 方法一:使用ORDER BY字段,将需要置底的数据放到最后 SELECT * FROM 表名 ORDER BY CASE WHEN id = 置底数据id THEN 1 ELSE 0 END, 排序字段 ASC/DESC; 说明: 1. 其中id为数据的
回到顶部
|