面向列数据库中的单宽表性能(Vectorwise)



我正在使用星形模式和单个非规范化表对向量进行一些测试。在非规范化表中,我有5个额外的列,它们>varchar(100)。我是以专栏为导向的世界的新手,因此我想了解并掌握正确的事实。

少数事实:

  1. 查询内存=20G,缓存内存设置为7G

  2. 仅名称列的大小就约为6G、6.5G、2.6G和650M。现在很明显,这些不能放在我的缓存中,所以系统是I/O绑定的。

  3. 如果我使用星型模式方法,它的工作速度会更快,因为它必须缓存整数列,所有这些都可以很容易地放入我的主内存缓存中。

我对此有几个问题:

  1. 如果我必须使用一个表,我需要增加RAM以确保所有这些列都能放入内存?我想知道是否有其他人使用Vertica或任何其他面向列的数据库完成了这种结构。如果是,您是否使用相同的方法,所有varchar列都应该放入RAM?

  2. 简单的星型模式查询

    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中的表现有任何关系。也就是说,第二个查询中涉及联接的行数越少,表明它在各种查询执行引擎中会做得更好。

相关内容

  • 没有找到相关文章

最新更新