假设数据库中已经填充了数据,并且以下每个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对此进行了一般性讨论,但我特别关注上面的四个查询。
答案 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