行存储与列存储

时间:2019-04-05 14:34:24

标签: sql database storage

假设数据库中已经填充了数据,并且以下每个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是主键。

文章Row Store and Column Store Databases对此进行了一般性讨论,但我特别关注上面的四个查询。

2 个答案:

答案 0 :(得分:1)

我不知道你在问什么。您有以下声明:

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

这表明您有一个包含四列的表,其中之一是一个ID。每个人都存储在自己的列中。

然后您有三个查询。第一个无法优化。假设id是主键(合理的假设),则优化了第二个键。第三个需要全表扫描-尽管仅使用DateOfBirth上的索引可以改善扫描效果。

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

这是一个非常简单的数据结构。四个查询示例中的三个访问所有列。我认为没有理由不使用常规行存储表结构。

答案 1 :(得分:0)

SELECT * FROM ...查询对于行存储更好,因为它必须访问许多文件。

列存储非常适合于在大量日期中进行聚合,或者当您的查询仅需要一个宽表中的几个字段时。

因此:

第一查询:row-wise

第二个查询:row-wise

第三个查询:column-wise

第四个查询:row-wise