假设数据库已经填充了数据,并且以下每条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
是主键。
文章行存储和列存储数据库对此进行了一般性讨论,但我特别关注上面的四个查询。
发布于 2019-04-06 09:32:24
SELECT * FROM
...查询更适合行存储,因为它必须访问多个文件。
列存储有利于在大量日期上进行聚合,或者当您有只需要从宽表中提取几个字段的问题时。
因此:
第一季:row-wise
第二个查询:row-wise
第三个查询:column-wise
第四个查询:row-wise
发布于 2019-04-05 14:37:53
我不知道你在问什么。你有这样的声明:
INSERT INTO Person (ID, DateOfBirth, Name, Surname)
VALUES('2e25', '1990-05-01', 'Ute', 'Muller');
这意味着您有一个有四列的表,其中一列是id。每个人都存储在自己的列中。
然后,您有三个查询。第一项无法优化。第二个是优化的,假设id
是一个主键(一个合理的假设)。第三种方法需要一个完整的表扫描--尽管这可以通过仅在DateOfBirth
上建立索引来改进。
如果数据已经采用这种格式,为什么要更改它?
这是一个非常简单的数据结构。您的四个查询示例中有三个可以访问所有列。我看不出为什么您不使用常规的行存储表结构。
https://stackoverflow.com/questions/55537754
复制相似问题