我正在使用星形模式和单个非规范化表对向量进行一些测试。在非规范化表中,我有5个额外的列,它们>varchar(100)。我是以专栏为导向的世界的新手,因此我想了解并掌握正确的事实。
少数事实:
-
查询内存=20G,缓存内存设置为7G
-
仅名称列的大小就约为6G、6.5G、2.6G和650M。现在很明显,这些不能放在我的缓存中,所以系统是I/O绑定的。
-
如果我使用星型模式方法,它的工作速度会更快,因为它必须缓存整数列,所有这些都可以很容易地放入我的主内存缓存中。
我对此有几个问题:
-
如果我必须使用一个表,我需要增加RAM以确保所有这些列都能放入内存?我想知道是否有其他人使用Vertica或任何其他面向列的数据库完成了这种结构。如果是,您是否使用相同的方法,所有varchar列都应该放入RAM?
-
简单的星型模式查询
select col1,col2, col3, sum(col4), sum(col5) from fact_table join tabl1 on condition join tab2 on condition where tab1.col1 = 1234 and tab2.col2 = 6789
工作速度慢于:
select col1,col2,col3,sumcol4, sumcol5 from (select col1,col2, col3, sum(col4) as sumcol4, sum(col5) as sumcol5 from fact_table where fact_table.col1 = 1234 and fact_table.col2 = 6789) as facts join tabl1 on condition join tab2 on condition
为什么?
注意:主表tab1和tab2是驻留在主存中的
我正在使用Vectorwise,但只想知道这些观察结果是否也适用于Vertica?
Vertica没有将表驻留在内存中的想法。在某些情况下,在某些类型的联接中,表数据可能已经在内存中或被放在内存中。但最终,Vertiac的性能取决于您在磁盘上存储内容的方式。
我不希望Vectorwise中这两个查询的性能与类似的查询和表在Vertica中的表现有任何关系。也就是说,第二个查询中涉及联接的行数越少,表明它在各种查询执行引擎中会做得更好。