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

上图中,左上为行存表,右上为行存表在硬盘上的存储方式。左下为列存表,右下为列存表在硬盘上的存储方式。
行、列存储有如下优缺点:
|
存储模型
|
优点
|
缺点
|
|
行存
|
数据被保存在一起。INSERT/UPDATE容易。
|
选择(SELECT)时即使只涉及某几列,所有数据也都会被读取。
|
|
列存
|
- 查询时只有涉及到的列会被读取。
- 投影(Projection)很高效。
- 任何列都能作为索引。
|
- 选择完成时,被选择的列要重新组装。
- INSERT/UPDATE比较麻烦。
|
一般情况下,如果表的字段比较多(大宽表),查询中涉及到的列不多的情况下,适合列存储。如果表的字段个数比较少,查询大部分字段,那么选择行存储比较好。
|
存储类型
|
适用场景
|
|
行存
|
- 点查询(返回记录少,基于索引的简单查询)。
- 增、删、改操作较多的场景。
- 频繁的更新、少量的插入。
|
|
列存
|
- 统计分析类查询 (关联、分组操作较多的场景)。
- 即席查询(查询条件不确定,行存表扫描难以使用索引)。
- 一次性大批量插入。
- 表列数较多,建议使用列存表。
- 如果每次查询时,只涉及了表的少数(
相关推荐
最近我在使用MySQL数据库的时候遇到了一个问题,就是我的MySQL不支持中文,导致我无法正常地向数据库中插入中文数据。 经过一番搜索和尝试,我发现了问题的根源在于MySQL的字符集设置。MySQL默认使用的字符集是latin1,而在这个字符集下是不支持中文的。所以,我们需要将字符集更改为utf8来支持中文。 # 查看当前的字符集设置 SHOW VARIABLES LIKE 'character_
如果您使用的是MySQL数据库,并且需要查看数据库名称,可以使用如下方法: 1. 登录您的MySQL数据库。您可以在终端或MySQL图形用户界面中进行登录。例如: mysql -uroot -p 2. 输入MySQL管理员密码。密码输入成功后,您会进入MySQL命令行。 3. 查看所有数据库的名称。在命令行中,输入如下命令: show databases; 4. 按回车键后,您将看到所有数据库名称
对于低性能的SQL语句的定位,最重要也是最有效的方法就是使用执行计划。 我们知道,不管是哪种数据库,或者是哪种数据库引擎,在对一条SQL语句进行执行的过程中都会做很多相关的优化,对于查询语句,最重要的优化方式就是使用索引。 而执行计划,就是显示数据库引擎对于SQL语句的执行的详细情况,其中包含了是否使用索引,使用什么索引,使用的索引的相关信息等。 执行计划包含的信息 id 有一组数字组成。表示一个
本篇文章将介绍c oracle周这个重要的IT领域活动。c oracle周是一个专注于c语言和Oracle数据库相关技术的会议。目的是提供一个互动交流的平台,让开发者和技术爱好者更深入了解c语言和Oracle数据库的最新发展趋势、新产品和使用经验。该周活动汇聚了众多行业内的专业人士和技术达人,每年都会吸引全球范围内成千上万的参会者和业界精英。 c oracle周重点聚集了一些最新的先进技术和最前沿
1.复制表结构及数据到新表 复制代码 代码如下: CREATE TABLE 新表 SELECT * FROM 旧表 2.只复制表结构到新表 复制代码 代码如下: CREATE TABLE 新表 SELECT * FROM 旧表 WHERE 1=2 即:让WHERE条件不成立. 1.复制表结构及数据到新表 复制代码 代码如下: CREATE TABLE 新表 SELECT * FROM 旧表 2.只
回到顶部
|