有人能够用一个示例查询来解释Vertica数据库中“投影”的概念吗?
Vertica不使用索引来查找数据。
从概念上讲,您仍然可以使用SQL访问表。但在底层,表中的数据存储在投影中,您可以为不同的查询进行优化。
我喜欢把它想象成一个代表一副牌的桌子。如果玩扑克牌,您可能仍然会说类似于
Select * from CardDeck limit 5;
FaceValue int (let's just assume face values are ints),
Suit varchar(10)
我可以创建我的投影(我省略了有关分区、超级投影、伙伴投影等细节)。
create projection CardDeck_p1
(
FaceValue ENCODING RLE,
Suit
)
as
select FaceValue, Suit from CardDeck order by FaceValue;
create projection CardDeck_p2
(
FaceValue,
Suit
)
as
select FaceValue, Suit from CardDeck order by Suit;
-- List all projections
SELECT projection_name FROM projections;
-- Force to use super projection, _super is the suffix of the super projection
SELECT * FROM FACT_TABLE_super;
来自 Vertica 文档的 Concepts Guide.pdf(大约在第23页左右)。
投影将数据存储在一种优化查询执行的格式中。它们类似于材料化视图,因为它们将结果集存储在磁盘上,而不是每次在查询中使用时计算它们。
此外
对于 SQL 的最终用户来说,投影是透明的。Vertica 查询优化器会自动选择用于任何查询的最佳投影。
要提高查询性能,只需创建投影即可。Vertica 将自动选择用于该查询的最佳投影。(注意:可以通过针对特定投影而不是表进行查询来强制使用特定投影)
我不知道您对投影的理解程度如何,但有关投影的更具体问题将允许更详细地阐述特定点。如果您想获得概念的一般视图,我建议获取并阅读 Concepts Guide.pdf。http://my.vertica.com