首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >行存储与列存储

行存储与列存储
EN

Stack Overflow用户
提问于 2019-04-05 14:34:24
回答 2查看 262关注 0票数 0

假设数据库已经填充了数据,并且以下每条SQL语句都是应用程序将执行的唯一查询,那么为什么对以下查询使用行级或列级记录存储更好呢?

1) SELECT * FROM Person

2) SELECT * FROM Person WHERE id=5

3) SELECT AVG(YEAR(DateOfBirth)) FROM Person

4) INSERT INTO Person (ID,DateOfBirth,Name,Surname) VALUES(2e25,’1990-05-01’,’Ute’,’Muller’)

在这些例子中,Person.id是主键。

文章行存储和列存储数据库对此进行了一般性讨论,但我特别关注上面的四个查询。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-06 09:32:24

SELECT * FROM ...查询更适合行存储,因为它必须访问多个文件。

列存储有利于在大量日期上进行聚合,或者当您有只需要从宽表中提取几个字段的问题时。

因此:

第一季:row-wise

第二个查询:row-wise

第三个查询:column-wise

第四个查询:row-wise

票数 0
EN

Stack Overflow用户

发布于 2019-04-05 14:37:53

我不知道你在问什么。你有这样的声明:

代码语言:javascript
运行
复制
INSERT INTO Person (ID, DateOfBirth, Name, Surname) 
    VALUES('2e25', '1990-05-01', 'Ute', 'Muller');

这意味着您有一个有四列的表,其中一列是id。每个人都存储在自己的列中。

然后,您有三个查询。第一项无法优化。第二个是优化的,假设id是一个主键(一个合理的假设)。第三种方法需要一个完整的表扫描--尽管这可以通过仅在DateOfBirth上建立索引来改进。

如果数据已经采用这种格式,为什么要更改它?

这是一个非常简单的数据结构。您的四个查询示例中有三个可以访问所有列。我看不出为什么您不使用常规的行存储表结构。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55537754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档